Pagini recente » Cod sursa (job #753850) | Cod sursa (job #842096) | Cod sursa (job #2208102) | Cod sursa (job #2473422) | Cod sursa (job #194169)
Cod sursa(job #194169)
#include <stdio.h>
#define maxl 1000
#include <math.h>
int i,j,k,n,a,b,cop;
long long prim[maxl],put[maxl],calc[maxl];
long long sol;
long long rez(long long x, long long y)
{
if (y==0) return 1;
long long sol=0;
if (y%2==0) sol=1LL*rez(x,y/2)*rez(x,y/2);
else sol=1LL*rez(x,y/2)*rez(x,y/2)*x;
sol%=9901;
return sol;
}
int main()
{
freopen("sumdiv.in","r",stdin);
freopen("sumdiv.out","w",stdout);
scanf("%d %d",&a,&b);
n=0;
if (a%2==0) prim[++n]=2;
while (a%2==0) {a/=2;put[n]++;}
while (a>1)
{
k=(int)sqrt(a);cop=a;
for (i=3; i<=k; i+=2)
if (k%i==0)
{
prim[++n]=i;
while (a%i==0)
{
put[n]++;
a/=i;
}
}
if (a==cop)
{
prim[++n]=a;
put[n]=1;
a=1;
}
}
for (i=1; i<=n; i++) put[i]*=b;
for (i=1; i<=n; i++)
{
calc[i]=rez(prim[i],put[i]+1);calc[i]--;
if (calc[i]<0) calc[i]+=9901;
for (j=1; j<=9901; j++)
if ((j*prim[i]-j)%9901==1)
{
calc[i]=(calc[i]*j)%9901;
break;
}
}
sol=1;
for (i=1; i<=n; i++)
sol=(sol*calc[i])%9901;
printf("%lld\n",sol);
return 0;
}