Pagini recente » Cod sursa (job #1269875) | Cod sursa (job #2420192) | Cod sursa (job #1516518) | Cod sursa (job #493419) | Cod sursa (job #196224)
Cod sursa(job #196224)
#include <stdio.h>
long long nr, j, a, b, rez, sum, SUM, i, puteri[100], exp[100];
inline long long mul(long long a, long b)
{
return ((a % 9901) * (b % 9901)) % 9901;
}
long long pow(long p, long n)
{
if (n == 1) return p % 9901;
if (n == 0) return 1;
long tmp = pow(p, n / 2);
return mul(mul(tmp, tmp), n % 2 ? p : 1);
}
long long numerge(long n, long p)
{
if (n == 0) return 1;
if (n == 1) return (p + 1) % 9901;
long long tmp = numerge(n / 2, p);
int xx = 1 + pow(p, n / 2 + 1);
return (mul(tmp, xx) - mul(!(n % 2), pow(p, n + 1)) + 9901) % 9901;
}
int main()
{
freopen ("sumdiv.in", "rt", stdin);
freopen ("sumdiv.out", "wt", stdout);
scanf("%lld %lld", &a, &b);
if (a == 1 || !b)
{
printf("1\n");
return 0;
}
for (i = 2; i * i <= a; ++i)
{
if (a % i == 0)
{
puteri[++puteri[0]] = i;
++exp[0];
while (a % i == 0)
{
++exp[exp[0]];
a /= i;
}
exp[exp[0]] *= b;
}
}
if (a > 1)
{
puteri[++puteri[0]] = a;
exp[++exp[0]] = b;
}
SUM = 1;
for (i = 1; i <= puteri[0]; ++i)
SUM = mul(SUM, numerge(exp[i], puteri[i]));
SUM %= 9901;
printf("%lld\n", SUM);
return 0;
}