?
№ | Отправитель | Задача | Язык | Вердикт | Время | Память | Отослано | Протест. | |
---|---|---|---|---|---|---|---|---|---|
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
?
?
?
?