Pagini recente » Cod sursa (job #149526) | Cod sursa (job #1724178) | Cod sursa (job #242789) | Cod sursa (job #583205) | Cod sursa (job #3134842)
//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], p%(MOD-1)*ex[i]%(MOD-1)+1)-1)%MOD*fastExp(fact[i]-1, MOD-2)%MOD;
fprintf(g, "%d", ans);
}
fclose(f);
fclose(g);
return 0;
}