Pagini recente » Cod sursa (job #3346588) | Cod sursa (job #3306939) | Cod sursa (job #3317988) | Cod sursa (job #3324603) | Cod sursa (job #3323163)
//https://www.infoarena.ro/problema/sumdiv
//#pragma GCC optimize ("Ofast")
//#pragma GCC optimize ("fast-math")
//#pragma GCC optimize ("unroll-loops")
//#define _USE_MATH_DEFINES
#include <iostream>
#include <fstream>
//#include <vector>
//#include <cstring>
//#include <cmath>
//#include <bitset>
//#include <queue>
//#include <stack>
//#include <utility>
//#include <algorithm>
//#include <string>
//#include <map>
//#include <unordered_map>
//#include <set>
//#include <unordered_set>
//#include <cstdint>
//#include <climits>
//#include <iomanip>
//#include <cstdio>
//#include <tuple>
using namespace std;
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
const int MOD = 9901;
void euclid(int a, int b, int64_t& x, int64_t& y)
{
if (b == 0)
{
x = 1;
y = 0;
}
else
{
int64_t x0, y0;
euclid(b, a % b, x0, y0);
x = y0;
y = x0 - (a / b) * y0;
}
}
int invMod(int x, int m)
{
int64_t x0, y0;
euclid(x, m, x0, y0);
return (x0 % m + m) % m;
}
int power_of_manyyy(int b, int e, int modulo)
{
int rez = 1;
while (e > 0)
{
if (e & 1)
rez = (int64_t)(rez * b) % modulo;
b = (int64_t)(b * b) % modulo;
e >>= 1;
}
return rez;
}
int rezultat(int div, int exp)
{
if (div % MOD == 0)
return 1;
if (div % MOD == 1)
return exp + 1;
return ((int64_t)((power_of_manyyy(div, exp + 1, MOD) + MOD) - 1) * invMod((div - 1), MOD)) % MOD;
}
int sumDiv(int b, int e)
{
int rez = 1;
for (int d = 2; d * d <= b; ++d)
{
if (b % d == 0)
{
int r = 0;
while (b % d == 0)
{
++r;
b /= d;
}
rez = ((int64_t)rez * rezultat(d, e * r)) % MOD;
//cout << (power_of_manyyy(d, (e + 1), MOD) - 1) % MOD << " " << invMod((d - 1), MOD) << "\n";
}
}
if (b > 1)
{
rez = ((int64_t)rez * rezultat(b, e)) % MOD;
//cout << (power_of_manyyy(b, (e + 1), MOD) - 1) % MOD << " " << invMod((b - 1), MOD) << "\n";
}
return rez;
}
signed main()
{
//ios_base::sync_with_stdio(false);
//cin.tie(nullptr);
//cout.tie(nullptr);
int a, b;
fin >> a >> b;
fout << sumDiv(a, b);
return 0;
}