Pagini recente » Cod sursa (job #1319340) | Cod sursa (job #357719) | Cod sursa (job #2123769) | Cod sursa (job #1546689) | Cod sursa (job #1547692)
#include <fstream>
#include <vector>
using namespace std;
using ll = long long;
#define pb push_back
#define mp make_pair
#define pii pair<int,int>
#define MOD 9901
#define Vmax 7100
vector< bool > isPrime(Vmax, true);
vector< int > prim;
int putere(int, int) ;
int main()
{
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
int i, j, a, b, exp, rez, factor;
prim.pb(2);
for(i = 3; i < Vmax; i += 2)
{
while(!isPrime[i] && i < Vmax) i += 2;
if(i < Vmax) prim.pb(i);
for(j = i * i; j < Vmax; j += i + i) isPrime[j] = false;
}
fin >> a >> b;
rez = 1;
for(auto it = prim.begin(); it != prim.end() && (*it) * (*it) <= a; ++it)
if(a % (*it) == 0)
{
for(exp = 0; a % (*it) == 0; ++exp) a /= (*it);
factor = putere(*it, exp * b + 1);
if(factor) --factor;
else factor = MOD - 1;
factor = (factor * putere((*it) - 1, MOD - 2)) % MOD;
rez = (rez * factor) % MOD;
}
if(a)
{
factor = putere(a, b + 1);
if(factor) --factor;
else factor = MOD - 1;
factor = (factor * putere(a - 1, MOD - 2)) % MOD;
rez = (rez * factor) % MOD;
}
fout << rez << '\n';
return 0;
}
int putere(int baza, int exp)
{
int rez;
for(rez = 1; exp; exp >>= 1)
{
if(exp & 1) rez = (rez * baza) % MOD;
baza = (baza * baza) % MOD;
}
return rez;
}