Pagini recente » Cod sursa (job #1585816) | Monitorul de evaluare | Cod sursa (job #1175618) | Cod sursa (job #1683349) | Cod sursa (job #931140)
Cod sursa(job #931140)
#include <fstream>
#include <bitset>
using namespace std;
const long long MOD = 9901;
long long N, M;
long long T, K;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
long long pow(long long x, long long p)
{
long long rez = 1;
x %= MOD;
for(;p;p>>=1)
{
if(p&1)
{
rez *= x;
rez %= MOD;
}
x *= x;
x %= MOD;
}
return rez;
}
void sol()
{
f >> N;
f >> M;
long long sd = 1, p = 0;
for(long long i = 2; i * i <= N && N > 1; ++i)
{
if(N % i) continue;
p = 0;
while(N % i == 0)
{
N /= i;
++p;
}
if(i % MOD == 1)
sd *= 1LL * (p + 1) % MOD;
else
{
long long p1 = ( pow ( i, p * M + 1 ) + MOD - 1 ) % MOD;
long long p2 = pow( i - 1, MOD - 2 ) % MOD;
sd *= 1LL * p1 * p2;
sd *= MOD;
}
}
if ( M > 1 ){
if ( N % MOD == 1 )
sd = ( sd * 1LL * ( M % MOD + 1 ) ) % MOD;
else{
long long p1 = ( pow ( N, M + 1) + MOD - 1 ) % MOD;
long long p2 = pow ( N - 1, MOD - 2 ) % MOD;
sd *= 1LL * p1 * p2;
sd %= MOD;
}
}
if ( N == 0 )
g << 0 << "\n";
else
g << sd << "\n";
}
int main()
{
sol();
}