Pagini recente » Cod sursa (job #2137142) | Cod sursa (job #2005228) | Cod sursa (job #2445666) | Cod sursa (job #1022820) | Cod sursa (job #2007855)
#include <fstream>
#include <iostream>
using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
const int mod = 9901;
bool prim[7200];
int P[2000], np, n, k, i, x;
int nr[2000], exp[2000],t;
void ciur(int n) {
int i, j;
P[np=1] = 2;
for (i = 3; i <= n; i += 2)
if (prim[i] == 0) {
P[++np] = i;
for (j = 3*i; j <= n; j += 2*i)
prim[j] = 1;
}
}
void euclid(int a, int b, int &x, int &y) {
if (b == 0) {
x = 1, y = 0;
return;
}
int xx, yy;
euclid(b, a%b, xx, yy);
x = yy;
y = xx-(a/b)*yy;
}
int inv_mod(int n) {
int x, y;
euclid(n, mod, x, y);
if (x < 0) x += mod;
return x;
}
int pow(int n, int k) {
int sol = 1, a = n;
while (k) {
if (k&1) sol = (sol*a)%mod;
a = (a*a)%mod;
k >>= 1;
}
return sol;
}
int main() {
ciur(7100);
f >> n >> k;
int n1 = n;
for (i = 1; n1 > 1; i++) {
if (n1%P[i] == 0) {
nr[++t] = P[i];
while (n1%P[i] == 0)
exp[t]++, n1 /= P[i];
}
if (P[i]*P[i] >= n1 && n1 > 1)
exp[++t] = 1, nr[t] = n1, n1 = 1;
}
int sol = 1;
//cout << (15*inv_mod(5))%mod <<'\n';
for (i = 1; i <= t; i++) {
x = (pow(nr[i], exp[i]*k+1)%mod)-1;
if (x < 0) x += mod;
x = (x*inv_mod(nr[i]-1))%mod;
sol = (sol*x)%mod;
}
g << sol;
}