?
# | Author | Problem | Lang | Verdict | Time | Memory | Sent | Judged | |
---|---|---|---|---|---|---|---|---|---|
192737937 |
Practice: Archaeopteryx |
653G - 16 | C++20 (GCC 11-64) | Accepted | 171 ms | 12028 KB | 2023-02-08 16:10:15 | 2023-02-08 16:10:15 |
#include<bits/stdc++.h> #define int long long using namespace std; int const M=300300,mod=1e9+7;bool vis[M]; int i,j,k,n,v,num,Ans,a[M],A[M],C[M],fac[M],inv[M]; int read(){ int x=0;char ch=getchar(); while (ch<'0'||ch>'9') ch=getchar(); while (ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar(); return x; } int c(int n,int m){return fac[n]*inv[m]%mod*inv[n-m]%mod;} int calc(int l,int r){return (l>r)?0:(!l?C[r]:(C[r]-C[l-1]));} int solve(int x){int s=0;while (x%i==0) x/=i,s++;return s;} signed main(){ n=read(); for (i=1;i<=n;i++) a[read()]++; for (i=fac[0]=1;i<M;i++) fac[i]=fac[i-1]*i%mod; for (inv[i=M-1]=336717977;i>0;i--) inv[i-1]=inv[i]*i%mod; for (i=C[0]=1;i<n;i++) C[i]=C[i-1]+c(n-1,i); for (i=2;i<M;i++){ if (vis[i]) continue;num=0; for (j=i<<1;j<M;j+=i) vis[j]=1; for (j=i;j<M;j+=i) for (k=1,v=solve(j);k<=a[j];k++) A[++num]=v; for (sort(A+1,A+1+num),j=1;j<=num;j++) (Ans+=(calc(0,n-num+j-2)-calc(n-num+j,n-1))*A[j])%=mod; } return printf("%lld\n",(Ans+mod)%mod),0; }
?
?
?
?