Pagini recente » Cod sursa (job #3304795) | Cod sursa (job #3337586) | Cod sursa (job #3356494) | Cod sursa (job #3313382) | Cod sursa (job #3316534)
#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;
a %= MOD;
while (b)
{
if (b & 1)
{
p *= a;
p %= MOD;
}
a *= a;
a %= MOD;
b >>= 1;
}
return p;
}
int altfel (int p ,int e)
{
if (e == 0)
return 1;
if (!(e & 1))
return (altfel (p, e / 2) * (1 + lgput(p, e / 2 + 1))) % MOD;
else
return (altfel(p, e - 1) + lgput(p, e)) % MOD;
}
inline int solutie (int a, int b)
{
int ans = 1;
for (auto elem : v)
{
if (a % elem == 0)
{
int sigma = 0;
while (a % elem == 0)
{
a /= elem;
sigma ++;
}
ans *= (altfel (elem, sigma * b));
}
}
if (a > 1)
ans = (ans * altfel(a,b)) % MOD;
return ans;
}
signed main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n >> k;
eratostene();
cout << solutie(n, k) % MOD;
return 0;
}