Pagini recente » Cod sursa (job #1402043) | Cod sursa (job #142940) | Cod sursa (job #2048838) | Cod sursa (job #893579) | Cod sursa (job #1174551)
#include <cstdio>
FILE* in;
FILE* out;
int euclid(int a, int b, int& x, int& y)
{
if(b==0)
{
x=1;
y=0;
return a;
}
int d,x0,y0;
d=euclid(b,a%b,x0,y0);
x=y0;
y=x0-(a/b)*y0;
return d;
}
int a,b;
const int Q=100001,R=9901;
int div[Q],nr[Q],loc;
int pow(int x, int p)
{
int rez=1;
while(p)
{
if(p%2==1)
{
rez*=x;
rez%=R;
}
p/=2;
x=(x*x)%R;
}
return rez;
}
int main()
{
in=fopen("sumdiv.in","r");
out=fopen("sumdiv.out","w");
fscanf(in,"%d%d",&a,&b);
int a0=a;
int nra;
for(int i=2; a>1; i++)
{
if(a%i==0)
{
nra=0;
while(a%i==0)
{
nra++;
a/=i;
}
loc++;
div[loc]=i;
nr[loc]=nra*b;
}
}
a=a0;
long long rez=1;
int act,aux;
for(int i=1; i<=loc; i++)
{
rez*=pow(div[i],nr[i]+1)-1;
rez%=R;
aux=euclid(div[i]-1,R,act,aux);
if(act<0)
act+=R;
rez*=act;
rez%=R;
}
fprintf(out,"%d",rez);
return 0;
}