Pagini recente » Cod sursa (job #2329907) | Monitorul de evaluare | Cod sursa (job #608847) | Cod sursa (job #3208535) | Cod sursa (job #2430522)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
const int MOD = 9901;
int A, B;
vector < pair <int, int> > desc;
int sol = 1;
int lgput(int base, int exp)
{
int ans = 1;
int aux = base;
for(int i = 1; i <= exp; i <<= 1)
{
if(i & exp)
ans = (ans * aux) % MOD;
aux = (aux * aux) % MOD;
}
return ans;
}
int main()
{
fin >> A >> B;
if(A == 0)
{
fout << 0;
return 0;
}
if(A == 1)
{
fout << 1;
return 0;
}
if(B == 0)
{
fout << 1;
return 0;
}
for(int i = 2; i * i <= A; i++)
if(A % i == 0)
{
int k = 0;
while(A % i == 0)
{
A /= i;
k++;
}
desc.push_back({i, k * B});
}
if(A != 1)
{
desc.push_back({A, B});
}
for(auto it : desc)
{
if(it.first % MOD == 1)
{
sol *= (B + 1) % MOD;
sol %= MOD;
}
else
{
sol *= (lgput(it.first, it.second + 1) - 1) % MOD;
sol %= MOD;
sol *= lgput(it.first - 1, MOD - 2) % MOD;
sol %= MOD;
while(sol < 0)
sol += MOD;
}
}
fout << sol;
return 0;
}