原文链接
题意
题解
代码
#include <bits/stdc++.h> using namespace std; const int N=5e6+5,mod=1e9+7; int Case=0,n,f[N],Pow[N]; int main(){ Pow[0]=1; for (int i=1;i<N;i++){ f[i]=(f[i-1]+(i-1)/2-i/3+mod)%mod; if (i%3==0) f[i]=(f[i]+1)%mod; if (i%2==0) f[i]=(f[i]-i/4+mod)%mod; Pow[i]=Pow[i-1]*2%mod; } for (int i=1;i<N;i++) for (int j=i*2;j<N;j+=i) f[j]=(f[j]-f[i]+mod)%mod; while (~scanf("%d",&n)){ int ans=0; for (int i=1;i*i<=n;i++) if (n%i==0){ ans=(1LL*f[i]*Pow[n/i-1]+ans)%mod; if (i*i!=n) ans=(1LL*f[n/i]*Pow[i-1]+ans)%mod; } printf("Case %d: %d\n",++Case,ans); } return 0; }