Pagini recente » Rating Maxim Anca Stefania (ancamaxim) | Cod sursa (job #583241) | Cod sursa (job #706586) | Cod sursa (job #272294) | Cod sursa (job #883724)
Cod sursa(job #883724)
//Descompun pe A in factori primi, iar A ^ B = P1 ^ K1 * P2 ^ K2 * ...
//Rezultatul e un produs de sume de termeni din progresii geometrice
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
#define Mod 9901
int Ans = 1, A, B;
int LgPow(int N, int P)
{
int Now = 1;
N %= Mod;
while(P)
{
if(P % 2) Now = (Now * N) % Mod;
N = (N * N) % Mod;
P /= 2;
}
return Now;
}
int InvMod(int A)
{
return LgPow(A, Mod - 2) % Mod;
}
int main()
{
freopen("sumdiv.in", "r", stdin);
freopen("sumdiv.out", "w", stdout);
int i, j;
scanf("%i %i", &A, &B);
for(i = 2; i * i <= A; i++)
{
int Exp = 0;
while(A % i == 0) Exp ++, A /= i;
Exp *= B;
if(Exp)
{
if(i % Mod == 1) Ans = (Ans * (Exp + 1)) % Mod;
else Ans = (Ans * (LgPow(i, Exp + 1) - 1 + Mod) % Mod * LgPow(i - 1, Mod - 2)) % Mod;
}
}
if(A > 1)
{
if(A % Mod == 1) Ans = (Ans * (B + 1)) % Mod;
else Ans = (Ans * (LgPow(A, B + 1) - 1 + Mod) % Mod * LgPow(A - 1, Mod - 2)) % Mod;
}
printf("%i\n", Ans);
return 0;
}