Pagini recente » Borderou de evaluare (job #2121567) | Cod sursa (job #2361000) | Cod sursa (job #954103) | Cod sursa (job #1085350) | Cod sursa (job #1976345)
#include <fstream>
#include <iostream>
#define NM 100005
#define mod 9901
using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
int d[NM], k, use[NM];
void ciur()
{
for(int i = 2; i < NM; ++i)
{
if(!use[i])
{
d[++k] = i;
for(int j = i + i; j < NM; j += i)
use[j] = 1;
}
}
}
int pow(int n, long long p)
{
long long ans = 1;
n = n % mod;
while(p)
{
if(p & 1) ans = (ans * n) % mod;
n = (n * n) % mod;
p >>= 1;
}
return ans;
}
int main()
{
int n, b, sum = 1;
long long p, top, bot;
f >> n >> b;
ciur();
for(int i = 1; i <= k && d[i] * d[i] <= n; ++i)
{
if(n % d[i]) continue;
p = 0;
while(n % d[i] == 0)
{
p++;
n /= d[i];
}
p *= b;
top = (pow(d[i], p + 1) + mod - 1) % mod;
bot = pow(d[i] - 1, mod - 2) % mod;
sum = (((sum * top) % mod) * bot) % mod;
}
if(n != 1)
{
top = (pow(n, b + 1) - 1) % mod;
bot = pow(n - 1, mod - 2) % mod;
sum = (((sum * top) % mod) * bot) % mod;
}
g << sum << '\n';
}