Pagini recente » Cod sursa (job #1024917) | Cod sursa (job #2277851) | Cod sursa (job #343797) | Cod sursa (job #166848) | Cod sursa (job #2667244)
#include <stdio.h>
#include <stdlib.h>
#define MOD 9901
int lgput(int n, int p){
int put = 1;
while (p > 0){
if (p % 2 == 1){
put = (long long)(put * n) % MOD;
}
n = (long long)(n * n) % MOD;
p /= 2;
}
return put;
}
int main()
{
FILE *fin, *fout;
fin = fopen("sumdiv.in", "r");
fout = fopen("sumdiv.out", "w");
int a, b;
fscanf(fin, "%d%d", &a, &b);
int x = 2, sum_div = 1;
while (x * x <= a){
int put = 0;
while (a % x == 0){
put ++;
a /= x;
}
if (put == 0) continue;
put *= b;
put ++;
int s;
if (x % MOD == 1){
s = put % MOD;
}else{
s = lgput(x, put) - 1;
if (s < 0) s += MOD;
s = (long long)(s * lgput(x - 1, MOD - 2));
}
sum_div = (long long)(sum_div * s) % MOD;
x ++;
}
if (a > 1){
x = a;
int put = 0;
while (a % x == 0){
put ++;
a /= x;
}
put *= b;
put ++;
int s;
if (x % MOD == 1){
s = put % MOD;
}else{
s = lgput(x, put) - 1;
if (s < 0) s += MOD;
s = (long long)(s * lgput(x - 1, MOD - 2));
}
sum_div = (long long)(sum_div * s) % MOD;
}
fprintf(fout, "%d", sum_div);
return 0;
}