Pagini recente » Cod sursa (job #1943357) | Cod sursa (job #146807) | Cod sursa (job #1868922) | Cod sursa (job #753912) | Cod sursa (job #2528555)
#include <bits/stdc++.h>
#define input "sumdiv.in"
#define output "sumdiv.out"
#define NMAX 100005
#define MOD 9901
using namespace std;
typedef long long ll;
ifstream in(input);
ofstream out(output);
ll B, E;
vector < ll > primes;
bool uz[NMAX];
ll fasto_expo(ll base, ll exp)
{
if(!exp) return 1;
if(exp == 1) return base % MOD;
if(exp % 2 == 1) return base % MOD * fasto_expo(base * base % MOD, exp / 2) % MOD;
return fasto_expo(base * base % MOD, exp / 2) % MOD;
}
void Erastostene()
{
primes.push_back(2);
for(int i = 3; i <= NMAX - 5; i += 2)
if(!uz[i])
{
primes.push_back(i);
for(int j = 3 * i; j <= NMAX - 5; j+= 2 * i)
uz[i] = 1;
}
}
void Read_Data()
{
in >> B >> E;
Erastostene();
}
void Solve()
{
ll sum = 1;
unsigned pivot;
for(pivot = 0; primes[pivot] * primes[pivot] <= B; pivot++)
{
ll expp = 0;
while(B % primes[pivot] == 0) B /= primes[pivot], expp++;
if(expp)
{
//out << primes[pivot] << " " << expp << "\n";
ll Num = fasto_expo(primes[pivot], expp * E + 1) - 1;
if(Num < 0) Num += MOD;
ll Nim = fasto_expo(primes[pivot], MOD - 2) - 1;
if(Nim < 0) Nim += MOD;
sum = (sum * Num) % MOD * Nim % MOD;
}
}
if(B > 1)
{
//out << B << " " << 1 << "\n";
ll Num = fasto_expo(primes[pivot], E + 1) - 1;
if(Num < 0) Num += MOD;
ll Nim = fasto_expo(primes[pivot] - 1, MOD - 2);
if(Nim < 0) Nim += MOD;
//out << Num << " " << Nim << "\n";
sum = ((sum * Num) % MOD) * Nim % MOD;
}
out << sum << "\n";
}
int main()
{
Read_Data();
Solve();
return 0;
}