Основное
 
 
Отправитель Задача Язык Вердикт Время Память Отослано Протест.  
216924674 Дорешивание:
BungeAuriculateRoot
653G - 16 C++14 (GCC 6-32) Полное решение 108 мс 9400 КБ 2023-08-03 06:12:49 2023-08-03 06:12:49
→ Исходный код
#include<bits/stdc++.h>
using namespace std;
const int N=3e5+5,p=1e9+7;
int n,inv[N],jc[N],ijc[N],sc[N],f[N],a,MX,cnt[N],b[N],sum[N],mx,ans;
long long x;
int C(int x,int y){return 1ll*jc[x]*ijc[y]%p*ijc[x-y]%p;}
int main(){
	scanf("%d",&n),inv[0]=inv[1]=jc[0]=jc[1]=ijc[0]=ijc[1]=1;
	for(int i=2;i<=n;++i) inv[i]=1ll*(p-p/i)*inv[p%i]%p;
	for(int i=2;i<=n;++i) jc[i]=1ll*jc[i-1]*i%p,ijc[i]=1ll*ijc[i-1]*inv[i]%p;
	sc[0]=1;
	for(int i=1;i<n;++i) sc[i]=(sc[i-1]+C(n-1,i))%p;
	for(int i=1;i<=n;++i) f[i]=((f[i-1]+sc[n-1])%p+p-(sc[i-1]+(i-2>=0?sc[i-2]:0))%p)%p;
	for(int i=1;i<=n;++i) scanf("%d",&a),++cnt[a],MX=max(MX,a);
	for(int i=2;i<=MX;++i)if(!b[i]){
		for(int j=i;j<=MX;j+=i) b[j]=1;
		mx=1,x=i;
		for(int j=1;x<=MX;++j,++mx,x*=i){
			sum[j]=0;
			for(int k=x;k<=MX;k+=x) sum[j]+=cnt[k];
			if(!sum[j]) break;
		}
		sum[mx]=0;
		for(int j=1;j<mx;++j) (ans+=1ll*j*(f[sum[j]]-f[sum[j+1]]+p)%p)%=p;
	}
	printf("%d",ans);
	return 0;
} //11258360289544677554
?
Время: ? ms, память: ? КБ
Вердикт: ?
Ввод
?
Вывод участника
?
Ответ жюри
?
Комментарий чекера
?
Диагностика
?
Показать детали тестирования