Pagini recente » Cod sursa (job #405250) | Cod sursa (job #409809) | Cod sursa (job #3273914) | Cod sursa (job #2857790) | Cod sursa (job #3256330)
#include <fstream>
using namespace std;
ifstream cin("sumdiv.in");
ofstream cout("sumdiv.out");
const int M=9901;
int phi(int n)
{
int r=n ,d=2;
while(d*d<n)
{
if(n%d==0)
{
r=r/d*(d - 1);
while(n%d==0)
n/=d;
}
d++;
}
if (n != 1)
{
r=r/n*(n - 1);
}
return r;
}
int plog(int p,int d)
{
int P=1;
d%=M;
while(p!=0)
{
if(p%2==1){
P=(P*d)%M;
}
d=d*d%M;
p/=2;
}
return P;
}
int invers(int a,int fi)
{
return plog(a,fi-1);
}
int main()
{
int a,b;
cin>>a>>b;
long long d=2,suma=1;
int fi=phi(M);
while(d*d<=a)
{
if(a%d==0)
{
int p=0;
while(a%d==0)
{
p++;
a/=d;
}
if((d-1)%M!=0)
suma=((long long) suma*(plog(d,p*b+1)-1+M)*invers(d-1,fi))%M;
else
{
suma=((long long) suma*(p*b+1))%M;
}
}
d++;
}
if(a!=1)
{
if (a%M!=1)
{
suma=((long long) suma*(plog(a,b+1)-1+M)*invers(a-1,fi))%M;
}
else
suma=((long long) suma*(b + 1))%M;
}
cout<<suma;
return 0;
}