http:///JudgeOnline/problem.php?id=2813
若j能整除i,则f[j]能整除f[i]
题目就变成了求约数个数和、约数的平方和
因为f[2]=1,所以奇数还要加上2的贡献
#include<cstdio>
#include<iostream>
using namespace std;
#define N 10000001
typedef long long LL;
const int mod=1000000007;
bool vis[N];
int p[664581];
int t[N],c[N];
int s[N],e[N];
int main()
{
int cnt=0;
t[1]=1;
s[1]=1;
for(int i=2;i<N;++i)
{
if(!vis[i])
{
p[++cnt]=i;
t[i]=((LL)i*i+1)%mod;
c[i]=1;
s[i]=2;
e[i]=1;
}
for(int j=1;j<=cnt;++j)
{
if(i*p[j]>=N) break;
vis[i*p[j]]=true;
if(i%p[j]==0)
{
t[i*p[j]]=((LL)t[i]*p[j]%mod*p[j]%mod+c[i])%mod;
c[i*p[j]]=c[i];
s[i*p[j]]=s[i]/(e[i]+1)*(e[i]+2);
e[i*p[j]]=e[i]+1;
break;
}
t[i*p[j]]=((LL)t[i]*((LL)p[j]*p[j]+1%mod))%mod;
c[i*p[j]]=t[i];
s[i*p[j]]=s[i]<<1;
e[i*p[j]]=1;
}
}
int ans1=0,ans2=0;
int Q;
int Qi,A,B,C;
scanf("%d",&Q);
scanf("%d%d%d%d",&Qi,&A,&B,&C);
while(Q--)
{
ans1+= Qi&1;
ans1+=s[Qi];
ans1-= ans1>=mod ? mod : 0;
ans2+=(Qi&1)<<2;
ans2+=t[Qi];
ans2-= ans2>=mod ? mod : 0;
Qi=((LL)Qi*A+B)%+C+1;
}
cout<<ans1<<'\n'<<ans2;
}
















