Pagini recente » Cod sursa (job #2823613) | Cod sursa (job #350960) | Istoria paginii runda/nustiucesazic/clasament | Cod sursa (job #157286) | Cod sursa (job #893620)
Cod sursa(job #893620)
#include <fstream>
using namespace std;
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
const int mod= 9901;
const int nmax= 50000000;
const int dmax= 8; //= maximum number of different prime divisors for x<=nmax;
int vd[dmax+1], ve[dmax+1];
int exp(int x, int y){
y%= (mod-1);
int sol= 1;
for (int i= 1; i<=y; i*= 2){
if (i&y){
sol= (sol*x)%mod;
}
x= (x*x)%mod;
}
return sol;
}
inline int inv(int x){
return exp(x, mod-2);
}
int comp_d(int a, int b, int x){
int e= 0;
while (a%x==0){
a/= x;
++e;
}
return (exp(x, e*b+1)-1)*inv(x-1);
}
int main(){
int a, b;
fin>>a>>b;
b%= (mod-1);
int sol= 1;
for (int i= 2; i*i<=a; ++i){
if (a%i==0){
sol*= comp_d(a, b, i);
}
}
if (a!=1){
sol*= comp_d(a, b, a);
}
fout<<sol<<"\n";
return 0;
}