求逆元的方法,将在接下来讲到。
代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
using namespace std;
long long n,i,j,m,k;
long long x,t;
long long r()
{
long long p=0,f=1;
char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-')
{
f=-1;
}
c=getchar();
}
while(c>='0'&&c<='9')
{
p=p*10+c-'0';
c=getchar();
}
return p*f;
}
long long sum=0;
long long power(long long a,long long b,long long p)
{
a%=p;
long long ret=1%p;
while(b)
{
if(b&1)
ret=ret*a%p;
b>>=1;
a=a*a%p;
}
return ret;
}
int main()
{
n=r(),m=r();
sum++;
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
t=0;
while(n%i==0)
{
n/=i;
t++;
}
t*=m;
sum*=(power(i,t+1,9901)-1)%9901*power(i-1,9899,9901)%9901;
sum%=9901;
}
}
if(n>1)
{
t=m;
sum*=(power(n,t+1,9901)-1)%9901*power(n-1,9899,9901)%9901;
sum%=9901;
}
cout<<sum;
return 0;
}
/*
5
20 1
30 50 60 40 81
*/