Pagini recente » Cod sursa (job #1717526) | Cod sursa (job #2951645) | Cod sursa (job #372238) | Cod sursa (job #416830) | Cod sursa (job #757987)
Cod sursa(job #757987)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define FISIN "sumdiv.in"
#define FISOUT "sumdiv.out"
#define P 9901ll
int mul(int a, int b) {
long long x = (long long)a * (long long)b;
return x % P;
}
int pow(int a, int e) {
if (!e) return 1;
int temp = pow(a, e / 2);
temp = mul(temp, temp);
if (e & 1) temp = mul(temp, a);
return temp;
}
int inv(int a) {
int result = pow(a, P - 2);
if (mul(result, a) != 1) {
printf("BUG!!!!!!!!\n");
printf("%d %d %d\n", a, result, mul(result, a));
for(;;);
}
return result;
}
int add(int a, int b) { return (a + b) % P; }
int sum_prim(int a, int e) {
int numa = add(pow(a, e + 1), (P - 1));
int numi = add(a, (P - 1));
return mul(numa, inv(numi));
}
int main() {
FILE *fin = fopen(FISIN, "rt");
FILE *fout = fopen(FISOUT, "wt");
int a, b;
fscanf(fin, "%d %d", &a, &b);
int result = 1;
for (int i = 2; i * i <= a; ++i) {
if (a % i) continue;
int pow = 0;
for (; !(a % i); ++pow) a/= i;
result = mul(result, sum_prim(i, pow * b));
}
if (a != 1) result = mul(result, sum_prim(a, b));
printf("%d\n", result);
fprintf(fout, "%d\n", result);
fclose(fout);
fclose(fin);
return 0;
}