Pagini recente » Cod sursa (job #1122787) | Cod sursa (job #1777929) | Cod sursa (job #349858) | Cod sursa (job #1387262) | Cod sursa (job #3316535)
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
#define xx first
#define yy second
#define all (x) begin(x), end(x)
#define MOD 9901
using pii = pair <int, int>;
using tii = tuple <int, int, int>;
#define cin fin
#define cout fout
ifstream cin ("sumdiv.in");
ofstream cout ("sumdiv.out");
int n;
constexpr int NMAX = (int) 1e6;
bool ciur[NMAX + 1];
vector <int> v;
int k;
inline void eratostene()
{
ciur[0] = ciur[1] = 1;
for (int i = 2; i * i <= NMAX; ++ i)
{
if (!ciur[i])
for (int j = i * i; j <= NMAX; j += i)
ciur[j] = 1;
}
for (int i = 2; i <= NMAX; ++ i)
{
if (!ciur[i])
v.push_back(i);
}
}
inline int lgput(int a, int b)
{
int p = 1;
while (b)
{
if (b & 1)
{
p *= a;
}
a *= a;
b >>= 1;
}
return p;
}
inline int inversModular(int x)
{
return lgput(x, MOD - 2);
}
inline void solutie (int x)
{
int idx = 0;
int p = 1, suma = 1;
while (idx < v.size() && v[idx] * v[idx] <= x)
{
int trala = v[idx];
int sigma = 0;
while (x % trala == 0)
{
sigma ++;
x /= trala;
}
if (sigma)
{
p *= (sigma + 1);
suma *= ((lgput(trala, (sigma + 1)) - 1)%MOD*inversModular(trala - 1)%MOD);
//suma %= MOD;
}
idx ++;
}
if (x != 1)
{
int d = x, sigma = 1;
if (sigma){
p *= (sigma + 1);
suma *= ((lgput(d, (sigma + 1)) - 1) %MOD*inversModular(d - 1)%MOD);
suma %= MOD;
}
}
cout << suma << '\n';
}
signed main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n >> k;
eratostene();
solutie(lgput(n, k));
return 0;
}