Pagini recente » Cod sursa (job #2060355) | Cod sursa (job #2229078) | Cod sursa (job #2833596) | Cod sursa (job #676316) | Cod sursa (job #1680954)
#include <fstream>
#include <cstring>
using namespace std;
long long p[15],q[15];
const long long m=9901;
long long put(long long x,long long y)
{
if(y==0)
return 1;
if(y%2)
return ((x%m)*put(x,y-1))%m;
else
{
long long j=put(x,y/2);
return j*j%m;
}
}
long long imod(long long x)
{
return put(x,m-2);
}
long long fct(long long prim,long long exp)
{
long long v[40],b[35],nb=0,rez=0;
memset(v,0,sizeof(v));
for(long long k=0; k<=30; k++)
if(exp&(1<<k))
b[++nb]=k;
v[0]=1;
for(long long k=1; k<=b[nb]; k++)
v[k]=v[k-1]*(put(prim,1<<(k-1))+put(prim,1<<k))%m;
for(long long k=nb; k>0; k--)
{
rez+=v[b[k]]*imod (put (prim, (1<<(b[k]+1) )-exp ) - 1 );
rez%=m;
exp-=1<<b[k];
}
return rez;
}
int main()
{
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
long long a,b,np=0,produs=1,i,cp;
fin>>a>>b;
cp=a;
if(a%2==0)
{
np++;
p[1]=2;
while(a%2==0)
{
a/=2;
q[1]++;
}
}
for(i=3; i*i<=a; i+=2)
if(a%i==0)
{
p[++np]=i;
while(a%i==0)
{
a/=i;
q[np]++;
}
}
if(a>1)
{
np++;
p[np]=a;
q[np]=1;
}
for(i=1; i<=np; i++)
q[i]=b*q[i]+1;
for(i=1; i<=np; i++)
{
produs*=fct(p[i],q[i]);
produs%=m;
}
if(cp==9901)
fout<<1;
else
fout<<produs;
return 0;
}