Pagini recente » Cod sursa (job #47975) | Cod sursa (job #939131) | Cod sursa (job #291783) | Cod sursa (job #1084267) | Cod sursa (job #2669419)
#include <stdio.h>
#include <stdlib.h>
#define MAX 7071
#define MOD 9901
int exprap(int a, int b){
int s=1;
while(b>0){
if(b%2==1){
s*=a;
s%=MOD;
}
a*=a;
a%=MOD;
b/=2;
}
return s;
}
int invmod(int x){
int a=exprap(x,MOD-2);
while(x<0)
x+=MOD;
}
int ciur[MAX+1],prime[5],divprimi[5][2];
int main(){
FILE *fin, *fout;
int a, b, d, i, iprime, idprime, s;
fin=fopen("sumdiv.in","r");
fscanf(fin,"%d%d",&a,&b);
fclose(fin);
iprime=0;
for(d=2;d<=MAX;d++){ ///Facem ciurul
if(ciur[d]==0){
for(i=d*d;i<=MAX;i+=d)
ciur[i]=1;
prime[iprime]=d;
iprime++;
}
}
idprime=0;
for(i=0;i<iprime;i++){ ///Calculam descompunerea in factori primi al lui a
if(a%prime[i]==0){
divprimi[idprime][0]=prime[i];
while(a%prime[i]==0){
divprimi[idprime][1]++;
a/=prime[i];
}
idprime++;
}
}
if(a>1){
divprimi[idprime][0]=a;
divprimi[idprime][1]=1;
idprime++;
}
s=1;
for(i=0;i<idprime;i++){
s*=(exprap(divprimi[i][0],divprimi[i][1]*b+1)-1);
s%=MOD;
s*=exprap(divprimi[i][0]-1,MOD-2);///Inversul modular al lui divprimi[i][0]-1
// s/=divprimi[i][0]-1;
s%=MOD;
}
fout=fopen("sumdiv.out","w");
fprintf(fout,"%d\n",s);
fclose(fout);
return 0;
}