Pagini recente » Cod sursa (job #3344235) | Cod sursa (job #140065) | Cod sursa (job #1565801) | Cod sursa (job #3326110) | Cod sursa (job #3319660)
#include <bits/stdc++.h>
using namespace std;
#define int unsigned long long
const int MOD = 9901;
int expmod(int a, int k)
{
int p = 1;
while (k > 0)
{
if (k % 2 == 1)
{
p *= a;
p %= MOD;
}
a *= a;
a %= MOD;
k /= 2;
}
return p;
}
int inv_mod(int a)
{
return expmod(a, MOD - 2);
}
int sumdiv(int a, int b)
{
if (a == 0) {
return 0;
}
if (a == 1) {
return 1;
}
vector<pair<int,int>> f;
int n = a;
for (int divv = 2; divv * divv <= n; ++divv)
{
if (n % divv == 0)
{
int put = 0;
while (n % divv == 0) {
n /= divv;
++put;
}
f.push_back({divv, put});
}
}
if (n > 1) f.push_back({n, 1}); // factor prim ramas
int allput = 1;
const int EXP_MOD = MOD - 1;
for (auto &it : f)
{
int p = it.first;
int e = it.second;
int eb = e * b % EXP_MOD;
int exp_total = (eb + 1) % EXP_MOD;
int num = expmod((int)(p % MOD), exp_total);
num = (num + MOD - 1) % MOD;
int den = (int)((p % MOD + MOD) % MOD);
den = (den + MOD - 1) % MOD;
int inv = inv_mod(den);
allput =( allput * num) % MOD;
allput = (allput * inv) % MOD;
}
return allput;
}
signed main()
{
ifstream cin("sumdiv.in");
ofstream cout("sumdiv.out");
int a, b;
cin >> a >> b;
cout << sumdiv(a, b);
}