Pagini recente » Cod sursa (job #315197) | Cod sursa (job #2286522) | Cod sursa (job #997860) | Cod sursa (job #2097067) | Cod sursa (job #396729)
Cod sursa(job #396729)
#include <stdio.h>
#define NMAX 50
#define MOD 9901
int v[NMAX], f[NMAX];
int A, B;
void scade(int &x){
if(x == 0) x = MOD-1;
else x--;
}
void cmmdc(int a, int b,int &d, int &x, int &y){
if(b == 0){
d = a;
x = 1;
y = 0;
return;
}
int x0, y0;
cmmdc(b, a%b, d, x0, y0);
x = y0;
y = x0 - (a / b)*y0;
}
int factor(int i){
int sol = 1, x = v[i], n = f[i]+1;
for(; n; n/=2){
if(n & 1) sol = (sol*x)%MOD;
x = (x * x) %MOD;
}
scade(sol);
int y, d;
cmmdc(MOD, v[i] - 1, d, x, y);
while(y < 0) y += MOD;
return (sol * y / d) % MOD;
}
int main(){
freopen("sumdiv.in", "r", stdin);
freopen("sumdiv.out", "w", stdout);
scanf("%d%d", &A, &B);
if(A == 1){
printf("1\n");
return 0;
}
for(int i = 2; i * i <= A; ++i)
if(A%i == 0){
v[++v[0]] = i;
for(; A%i == 0; A /= i, f[v[0]]++);
f[v[0]] *= B;
}
if(A > 1){
v[++v[0]] = A;
f[v[0]] = B;
}
int p = 1;
for(int i = 1; i <= v[0]; ++i)
p = (p * factor(i))%MOD;
printf("%d\n", p);
return 0;
}