Pagini recente » Monitorul de evaluare | Cod sursa (job #954477) | Borderou de evaluare (job #3174910) | Cod sursa (job #1306111) | Cod sursa (job #2119002)
#include<fstream>
#include<iostream>
#define DN 8005
#define M 9901
using namespace std;
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
long long a,b,v[DN],r[DN],nr,f,rez=1;
long long ve(long long a,long long b)
{
long long c,p,f=1;
while(b)
{
p=1;
c=a;
while(1)
{
if(1LL*2*p>b)
break;
p=2*p;
c=(c*c)%M;
}
b-=p;
f=(f*c)%M;
}
return f;
}
int main()
{
fin>>a>>b;
if(a==0)
{
fout<<0;
return 0;
}
for(int i=2;i<DN;i++)
if(v[i]==0)
{
nr++;
r[nr]=i;
for(int j=2*i;j<DN;j+=i)
v[j]=1;
}
for(int i=1;r[i]*r[i]<=a;i++)
if(a%r[i]==0)
{
f=0;
while(a%r[i]==0)
{
f++;
a/=r[i];
}
f=f*b;
cout<<f<<'\n';
rez=(rez*((ve(r[i]%M,f+1)-1+M)%M))%M;
rez=(rez*ve((r[i]%M-1+M)%M,M-2))%M;
}
if(a!=1)
{
f=b;
rez=(rez*((ve(a%M,f+1)-1+M)%M))%M;
rez=(rez*ve((a-1+M)%M,M-2))%M;
}
fout<<rez;
}