Pagini recente » Cod sursa (job #1110169) | Cod sursa (job #291812) | Cod sursa (job #1663367) | Cod sursa (job #2541418) | Cod sursa (job #3164787)
#include <stdio.h>
#define MOD 9901
int exp_rapid(int a, int b){
int p=1;
while(b){
if(b%2==1){
p=p*a%MOD;
}
a=a*a%MOD;
b/=2;
}
return p;
}
void invmod(int a, int b, int *cmmdc, int *x, int *y){
if(b==0){
*cmmdc=a;
*x=1;
*y=0;
}
else{
int x0, y0;
invmod(b, a%b, cmmdc, &x0, &y0);
*x=y0;
*y=x0-(a/b)*y0;
}
}
int main()
{
FILE *fin, *fout;
int a, b, d, numarator, numitor, nr, x, y, cmmdc;
fin=fopen("sumdiv.in", "r");
fscanf(fin, "%d%d", &a, &b);
fclose(fin);
///numarator=produs de p^(e+1)-1
///numitor=produs de p-1
///p-factor prim
d=2;
numarator=1;
numitor=1;
while(d*d<=a){
if(a%d==0){
nr=1;
while(a%d==0){
nr=nr*d%MOD;
a/=d;
}
nr=(d*exp_rapid(nr, b)-1+MOD)%MOD;
numarator=numarator*nr%MOD;
numitor=numitor*(d-1)%MOD;
}
d++;
}
if(a>1){
nr=a;
nr=(nr%MOD*exp_rapid(nr, b)-1+MOD)%MOD;
numarator=numarator*nr%MOD;
numitor=numitor*(a-1)%MOD;
}
fout=fopen("sumdiv.out", "w");
invmod(numitor, MOD, &cmmdc, &x, &y);
fprintf(fout, "%d", numarator*(x+((-x)/MOD+1)*MOD)%MOD);
fclose(fout);
return 0;
}