Pagini recente » Cod sursa (job #2329177) | Cod sursa (job #679681) | Cod sursa (job #2639305) | Cod sursa (job #2521288) | Cod sursa (job #3149923)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
const int NMAX = 50000000;
const int MOD = 9901;
bool prim[8000];
long long a, b;
vector<int> ciur;
void eratostene() {
prim[0] = prim[1] = 1;
for(int d = 2; d * d <= NMAX; d++)
if(!prim[d]) {
for(int j = d * 2; j * j <= NMAX; j += d)
prim[j] = 1;
ciur.push_back(d);
}
}
int lgPow(long long x, long long p) {
long long v = 1;
while(p > 0) {
if(p & 1)
v = 1LL * v * x % MOD;
x = 1LL * x * x % MOD;
p >>= 1;
}
return v;
}
inline int invMod(long long n) {
return lgPow(n, MOD - 2);
}
void desc(long long x) {
long long s = 1;
for(int d : ciur)
if(x % d == 0) {
if(1LL * d * d > x) break;
long long p = 0;
while (x % d == 0) {
p++; x /= d;
}
p *= b;
s = (1LL * s * (lgPow(d, p + 1) - 1) % MOD) * invMod(d - 1) % MOD;
}
if (x > 1)
s = (1LL * s * (lgPow(x, b + 1) - 1) % MOD) * invMod(x - 1) % MOD;
g << s;
}
int main() {
eratostene();
f >> a >> b;
desc(a);
return 0;
}