Pagini recente » Cod sursa (job #2723060) | Cod sursa (job #3138221) | Cod sursa (job #3207367) | Cod sursa (job #2678461) | Cod sursa (job #3163725)
#include <stdio.h>
#define MAXFACTPRIM 7071
#define MOD 9901
char ciur[MAXFACTPRIM+1];
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, index, index2, d, numarator, numitor, nr, x, y, cmmdc;
for(index=2;index*index<=MAXFACTPRIM;index++){
if(ciur[index]==0){
for(index2=index*index;index2<=MAXFACTPRIM;index2+=index){
ciur[index2]=1;
}
}
}
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(ciur[d]==0&&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;
}