Pagini recente » Cod sursa (job #1481985) | Cod sursa (job #2803217) | Cod sursa (job #1875955) | Cod sursa (job #3182767) | Cod sursa (job #2925741)
#include <fstream>
#include <vector>
#define int long long
using namespace std;
ifstream cin ("sumdiv.in");
ofstream cout ("sumdiv.out");
using dragnea = pair <int, int>;
const int MOD = 9901;
vector <dragnea> v;
int a, b, sol = 1;
void desc ()
{
int d = 2;
while (d * d <= a)
{
if (!(a % d))
{
int e = 0;
while (!(a % d)) a /= d, ++e;
v.push_back({d, e * b});
}
++d;
}
if (a > 1)
v.push_back({a, b});
}
int llpow (int a, int b)
{
int res = 1;
a = a % MOD;
while (b)
{
if (b & 1)res = res * a % MOD;
b >>= 1;
a = a * a % MOD;
}
return res;
}
int invers (int x)
{
return llpow (x, MOD - 2);
}
signed main()
{
ios_base :: sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> a >> b;
desc ();
for (auto it : v)
{
if (it.first % MOD != 1)
{
int part = (llpow(it.first, it.second + 1) - 1 + MOD) % MOD;
int inv = invers(it.first - 1);
sol = ((sol * part % MOD) * inv) % MOD;
}
else
sol = sol * (it.second + 1) % MOD;
}
cout << sol << '\n';
return 0;
}