Description
f(i)为满足,求,结果模1e9+7
Input
第一行一整数T表示用例组数,每组用例输入两个整数m和p,p是素数 (2<=m<=p-1,2<=p<=1e9+7)
Output
对于每组用例,输出的值,结果模1e9+7
Sample Input
3
5 7
3 11
2 103
Sample Output
Case #1: 210
Case #2: 390
Case #3: 50388
Solution
Code
#include<cstdio>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
int phi(int n)
{
int ans=n;
for(int i=2;i*i<=n;i++)
if(n%i==0)
{
ans=ans/i*(i-1);
while(n%i==0)n/=i;
}
if(n>1)ans=ans/n*(n-1);
return ans;
}
int Solve(int n)
{
int ans=0;
for(int i=1;i*i<=n;i++)
{
int j=n/i;
if(i*j==n)
{
ans+=((ll)j*phi(j)+(j==1))/2%mod*i*i%mod;
if(ans>=mod)ans-=mod;
if(i!=j)
{
ans+=(((ll)i*phi(i)+(i==1))/2)%mod*j*j%mod;
if(ans>=mod)ans-=mod;
}
}
}
ans-=((ll)n*(n+1)/2)%mod;
if(ans<0)ans+=mod;
return ans;
}
int main()
{
int Case=1,T,m,p;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&m,&p);
printf("Case #%d: %d\n",Case++,(ll)m*Solve(p-1)%mod);
}
return 0;
}