Pagini recente » Cod sursa (job #2183130) | Cod sursa (job #1414397) | Cod sursa (job #111713) | Cod sursa (job #52529) | Cod sursa (job #2187119)
#include<fstream>
#include<iostream>
using namespace std;
ifstream in("sumdiv.in");
ofstream out("sumdiv.out");
const int NMAX = 1e4 + 100;
const int MOD = 9901;
int a,b;
int v[NMAX], prime[NMAX], no, f;
int res = 1;
int lgput(int a,int b)
{
int c, p, f = 1;
while(b != 0) {
p = 1;
c = a;
while(1) {
if(2 * p > b)
break;
p = 2 * p;
c = (c * c) % MOD;
}
b -= p;
f = (f * c) % MOD;
}
return f;
}
int main()
{
in >> a >> b;
if(a == 0) {
out << "0\n";
return 0;
}
for(int i = 2; i < NMAX; i++) {
if(v[i] == 0) {
no++;
prime[no]=i;
for(int j = 2 * i; j < NMAX; j += i)
v[j]=1;
}
}
for(int i = 1; prime[i] * prime[i] <= a && i <= no; i++) {
if(a % prime[i] == 0) {
f = 0;
while(a % prime[i] == 0) {
f++;
a /= prime[i];
}
f = f * b;
if(prime[i] == MOD)
continue;
res = (res * ((lgput(prime[i] % MOD, f + 1) - 1 + MOD) % MOD)) % MOD;
res = (res * lgput((prime[i] % MOD - 1 + MOD) % MOD, MOD - 2)) % MOD;
}
}
if(a != 1) {
if(a % MOD == 1)
res = (res * (b + 1)) % MOD;
else {
f = b;
res = (res * ((lgput(a % MOD, f + 1) - 1 + MOD) % MOD)) % MOD;
res = (res * lgput((a - 1 + MOD) % MOD, MOD - 2)) % MOD;
}
}
out << res << '\n';
in.close();
out.close();
return 0;
}