Pagini recente » Profil StoianRadu | Cod sursa (job #174376) | Cod sursa (job #8122) | Cod sursa (job #2954757) | Cod sursa (job #1065068)
#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 main()
{
int a, b, s;
int i, power;
freopen("sumdiv.in", "r", stdin);
freopen("sumdiv.out", "w", stdout);
scanf("%d %d", &a, &b);
power = 1;
for (i = 1; i <= b; ++i)
{
power *= a;
power %= p;
}
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);
}