Pagini recente » Cod sursa (job #1523224) | Cod sursa (job #2396814) | Cod sursa (job #2110) | Cod sursa (job #1862829) | Cod sursa (job #2982236)
#include <fstream>
#include <cstring>
#include <vector>
#include <deque>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <algorithm>
#include <iomanip>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;
ifstream cin("sumdiv.in");
ofstream cout("sumdiv.out");
using ll = unsigned long long;
//#define int ll
using pi = pair<int,int>;
using pll = pair<ll, ll>;
#define pb push_back
#define x first
#define y second
#define bg begin()
#define ed end()
const int MOD = 9901, INF = 1e9;
const char nl = '\n';
const int NMAX = 2e5+1;
int v[NMAX];
ll my_pow(ll b, ll e)
{
ll p = 1;
while(e)
{
if(e & 1)
{
p = p * b;
while(p % MOD == 0 && p)
p /= MOD;
p = p % MOD;
}
b = b * b;
while(b % MOD == 0 && b)
b /= MOD;
b = b % MOD;
e /= 2;
}
return p;
}
void solve()
{
ll a, b, i, ans = 1, num, den, cnt;
cin >> a >> b;
while(a % MOD == 0)
a /= MOD;
for(i = 2; i * i <= a; i++)
{
if(a % i == 0)
{
cnt = 0;
while(a % i == 0)
{
a /= i;
cnt++;
}
num = my_pow(i, cnt);
num = my_pow(num, b);
num = num * i;
while(num % MOD == 0 && num)
num /= MOD;
num = num % MOD;
num--;
if(num <= 0)
num += MOD;
den = i - 1;
if(den <= 0)
den += MOD;
while(num % MOD == 0 && num)
num /= MOD;
while(den % MOD == 0 && den)
den /= MOD;
ans = ans * num % MOD * my_pow(den, MOD - 2) % MOD;
}
}
if(a != 1)
{
num = my_pow(a, b);
num = num * a;
while(num % MOD == 0 && num)
num /= MOD;
num = num % MOD;
num--;
if(num == 0)
{
ans = ans * (b + 1) % MOD;
}
else
{
if(num <= 0)
num += MOD;
den = a - 1;
if(den <= 0)
den += MOD;
while(num % MOD == 0 && num)
num /= MOD;
while(den % MOD == 0 && den)
den /= MOD;
ans = ans * num % MOD * my_pow(den, MOD - 2) % MOD;
}
}
cout << ans;
}
int main()
{
cin.tie(0)->sync_with_stdio(0);
cin.exceptions(cin.failbit);
int T;
T = 1;
while(T--)
solve();
return 0;
}