Pagini recente » Cod sursa (job #770312) | Cod sursa (job #1168794) | Cod sursa (job #2468771) | Cod sursa (job #1734669) | Cod sursa (job #893829)
Cod sursa(job #893829)
#include <fstream>
using namespace std;
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
typedef long long i64;
const int mod= 9901;
const int nmax= 50000000;
const int dmax= 8; //= maximum number of different prime divisors for x<=nmax;
i64 exp(i64 x, i64 y){
x%= mod;
y%= (mod-1);
i64 sol= 1;
for (int i= 1; i<=y; i*= 2){
if (i&y){
sol= (sol*x)%mod;
}
x= (x*x)%mod;
}
return sol;
}
inline i64 inv(i64 x){
return exp(x, mod-2);
}
i64 comp_d(i64 &a, i64 b, i64 x){
int e= 0;
while (a%x==0){
a/= x;
++e;
}
printf("%d\n", e);
return ((exp(x, e*b+1)-1)*inv(x-1) +mod) %mod;
}
int main(){
i64 a, b;
fin>>a>>b;
b%= (mod-1);
i64 sol= 1;
for (int i= 2; i*i<=a; ++i){
if (a%i==0){
sol= (sol*comp_d(a, b, i)) %mod;
}
}
if (a!=1){
sol= (sol*comp_d(a, b, a)) %mod;
}
fout<<sol<<"\n";
return 0;
}