Pagini recente » Borderou de evaluare (job #1630313) | Borderou de evaluare (job #1611011) | Borderou de evaluare (job #2000114) | Borderou de evaluare (job #1542966) | Cod sursa (job #3319655)
#include <bits/stdc++.h>
using namespace std;
#define int 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 n)
{
int divv = 2, put = 0, allput = 1;
while (n > 1)
{
divv %= MOD;
while (n % divv == 0)
{
n /= divv;
put ++;
}
put %= MOD;
if (put > 0)
{
int x = (expmod(divv, put + 1) - 1) + MOD, y = inv_mod(divv - 1) + MOD;
x %= MOD;
y %= MOD;
allput *= x * y;
allput %= MOD;
}
divv ++;
put = 0;
if ((divv * divv) % MOD > n)
divv = n;
}
return allput;
}
signed main()
{
ifstream cin("sumdiv.in");
ofstream cout("sumdiv.out");
int a, b; cin >> a >> b;
int c = expmod(a, b) % MOD;
cout << sumdiv(c);
}