Pagini recente » Cod sursa (job #2104576) | Cod sursa (job #1272230) | Cod sursa (job #1332064) | Cod sursa (job #1612714) | Cod sursa (job #3134846)
//Ilie Dumitru
#include<cstdio>
const int NMAX=60;
const int MOD=9901;
int cnt, fact[NMAX], ex[NMAX];
int fastExp(int x, int y)
{
if(y==0)
return 1;
if(y==1)
return x;
int a=fastExp(x, y>>1);
a=a*a%MOD;
if(y&1)
a=a*x%MOD;
return a;
}
void factorizare(int n)
{
int i;
if(!(n&1))
{
cnt=1;
*fact=2;
do
++*ex, n>>=1;
while(!(n&1));
}
for(i=3;i*i<=n;i+=2)
if(n%i==0)
{
fact[cnt]=i;
do
{
n/=i;
++ex[cnt];
}while(n%i==0);
++cnt;
}
if(n>1)
{
fact[cnt]=n;
ex[cnt++]=1;
}
}
int main()
{
FILE* f=fopen("sumdiv.in", "r"), *g=fopen("sumdiv.out", "w");
//FILE* f=stdin, *g=stdout;
int n, p, ans, i;
fscanf(f, "%d%d", &n, &p);
if(n<2)
fprintf(g, "%d\n", n);
else
{
ans=1;
factorizare(n);
for(i=0;i<cnt;++i)
ans=ans*(fastExp(fact[i]%MOD, (p*ex[i]+1)%(MOD-1))-1+MOD)%MOD*fastExp((fact[i]-1)%MOD, MOD-2)%MOD;
fprintf(g, "%d", ans);
}
fclose(f);
fclose(g);
return 0;
}