Pagini recente » Cod sursa (job #614896) | Cod sursa (job #936214) | Cod sursa (job #2862722) | Cod sursa (job #2199324) | Cod sursa (job #918410)
Cod sursa(job #918410)
#include <stdio.h>
#include <math.h>
using namespace std;
FILE *f=fopen("sumdiv.in","r");
FILE *g=fopen("sumdiv.out","w");
const int mod=9901;
short cr[10001];
long long a,b,i,sum,p,max,x,y;
long long ridic(long long n,long long k)
{
long long i,a,s;
a=n;
s=1;
for(i=0;(1<<i)<=k;i++)
{
if (((1<<i)&k)>0)s=(s*a)%mod;
a=(a*a)%mod;
}
return s;
}
void ciur()
{
int i,j;
for(i=3;i<=max;i+=2)
if (cr[i]==0)
for(j=i+i;j<=max;j+=i)
cr[j]=1;
}
int main()
{
fscanf(f,"%d%d",&a,&b);
max=trunc(sqrt(a));
sum=1;
ciur();
for(i=2;i*i<=a;i++)
if (cr[i]==0 && a%i==0)
{
p=0;
while(a%i==0){a=a/i;p++;}
x=(ridic(i,p*b+1)-1)%mod;
y=(ridic(i-1,mod-2)%mod);
sum=((sum%mod)*(x*y)%mod)%mod;
}
if (a!=1)
{
x=(ridic(a,b+1)-1)%mod;
y=(ridic(a-1,mod-2)%mod);
sum=((sum%mod)*(x*y)%mod)%mod;
}
fprintf(g,"%d",sum);
fclose(g);
return 0;
}