Pagini recente » Cod sursa (job #1979998) | Cod sursa (job #2304546) | Cod sursa (job #1809872) | Cod sursa (job #1664032) | Cod sursa (job #757036)
Cod sursa(job #757036)
#include <stdio.h>
#define MOD 9901
int A[1000], Nr[1000];
int i, act,a , b;
int Ans;
inline int put(int N, int K)
{
int rez = 1;
for (int i = 0; (1<<i) <= K; ++i){
if (K & (1<<i))
rez = (rez * N) % MOD;
N = (N * N) % MOD;
}
return rez;
}
inline int f(int a, int b)
{
if (b == 1) return a;
if (b == 0) return 0;
if (b & 1)
return (a * (1+ f(a, b-1))) % MOD;
else
return ( f(a, b >> 1) * (1 + put(a, b >> 1)) )% MOD;
}
int main()
{
freopen("sumdiv.in","r",stdin);
freopen("sumdiv.out","w",stdout);
scanf("%d %d",&a, &b);
for (i = 2; i * i <= a; ++i){
if (a % i != 0) continue;
A[++A[0]] = i;
while (a % i == 0){
a /= i;
++Nr[A[0]];
}
}
if (a != 1){
A[++A[0]] = a;
Nr[A[0]] = 1;
}
for (i = 1; i <= A[0]; ++i){
Nr[i] *= b;
A[i] %= MOD;
}
Ans = 1;
for (i = 1; i <= A[0]; ++i)
Ans = (Ans * ( f(A[i], Nr[i]) + 1)) % MOD;
printf("%d\n", Ans);
return 0;
}