本文共 1137 字,大约阅读时间需要 3 分钟。
#include#include #include #include #include using namespace std;const int mod=1000000007;const int maxn=1000000+10;long long dp[maxn];long long a[maxn];int num[1000010];long long b[maxn];int main(){ int n; cin>>n; int maxx=0; dp[0]=1; memset(num,0,sizeof(num)); for(int i=1; i<=n; i++) { int x; cin>>x; maxx=max(maxx,x); dp[i]=(2*dp[i-1])%mod; num[x]++; } long long ans=0; long long sum=0; for(int i=maxx; i>=2; i--) { int temp=0; sum=0; for(int j=i; j<=maxx; j+=i) { temp+=num[j]; } if(temp==0) continue; sum=((long long)temp*dp[temp-1])%mod; for(int j=i*2; j<=maxn; j+=i) { sum=(sum-b[j]+mod)%mod; } b[i]=sum; ans=(ans+((long long)i*sum)%mod)%mod; } cout< <