Pagini recente » Cod sursa (job #2292706) | Cod sursa (job #841359) | Cod sursa (job #2630251) | Cod sursa (job #929298) | Cod sursa (job #194184)
Cod sursa(job #194184)
#include <stdio.h>
#define maxl 1000
#define v 9901
#include <math.h>
long long i,j,k,n,a,b,cop,sol,t,p;
long long prim[maxl],put[maxl],calc[maxl];
long long rez(long long x, long long y)
{
if (y==1) return (x%v);
p=rez(x,y/2);
if (y%2==0) t=((p%v)*(p%v))%v;
else t=((((p%v)*(p%v))%v)*x)%v;
return t;
}
int main()
{
freopen("sumdiv.in","r",stdin);
freopen("sumdiv.out","w",stdout);
scanf("%lld %lld",&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 (a%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]+=v;
if (calc[i]==0) calc[i]=put[i]+1;
for (j=0; j<=v; j++)
if ((1LL*j*prim[i]-j)%v==1)
{
calc[i]=(1LL*calc[i]*j)%v;
break;
}
}
sol=1;
for (i=1; i<=n; i++)
sol=(1LL*sol*calc[i])%v;
printf("%lld\n",sol);
return 0;
}