Pagini recente » Cod sursa (job #667374) | Cod sursa (job #3266964) | Cod sursa (job #2817527) | Cod sursa (job #97898) | Cod sursa (job #1065080)
#include <stdio.h>
const int p = 9901;
// euclid extins => d = gcd(a, b) = ax + by
int gcd(int a, int b, int *x, int *y)
{
if (b == 0)
{
*x = 1;
*y = 0;
return a;
}
else
{
int xp, yp;
int d = gcd(b, a%b, &xp, &yp);
*x = yp;
int m = ((long long)((a/b) % p) * (long long) yp) % p;
*y = (xp - m + p) % p;
// atentie aici
// operatiile trebuie efectuate modulo p
// fie p foarte mare: 10 000 000 007
// 0 <= yp < p incape in int
// 0 <= ((x/y) % p) < p incape in int
return d;
}
}
int pow(n, x)
{
if (x == 0)
{
return 1;
}
else if (x == 1)
{
return n;
}
else
{
int power = pow(n, x/2) * pow(n, x/2) % p;
if (x%2)
power = power * n % p;
return power;
}
}
int main()
{
int a, b, s;
int i, power;
freopen("sumdiv.in", "r", stdin);
freopen("sumdiv.out", "w", stdout);
scanf("%d %d", &a, &b);
power = pow(a, b);
s = 1 + power; // 1 | a si a | a
for (i = 2; i <= power/2; ++i)
{
if ((power%i) == 0)
{
s += i;
s %= p;
}
}
printf("%d\n", s);
}