Pagini recente » Rating Alex Iordache (Alexandru_Iordache) | Cod sursa (job #3290332) | Cod sursa (job #2747244) | Cod sursa (job #96874) | Cod sursa (job #757992)
Cod sursa(job #757992)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define FISIN "sumdiv.in"
#define FISOUT "sumdiv.out"
#define P 9901ll
inline 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;
}
inline int inv(int a) {
return result = pow(a, P - 2);
}
inline 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));
fprintf(fout, "%d\n", result);
fclose(fout);
fclose(fin);
return 0;
}