Pagini recente » Cod sursa (job #1819424) | Cod sursa (job #482518) | Cod sursa (job #2621636) | Cod sursa (job #2841019) | Cod sursa (job #2931021)
#include <bits/stdc++.h>
using namespace std;
#define MOD 9901
#define NO_PRIME_FACTORS 8
int noPrimeFactors;
int prime[NO_PRIME_FACTORS];
int exponent[NO_PRIME_FACTORS];
void desc(int a, int b) {
int div;
noPrimeFactors = 0;
div = 2;
while (div * div <= a) {
if (a % div == 0) {
prime[noPrimeFactors] = div;
exponent[noPrimeFactors] = 0;
while (a % div == 0) {
a /= div;
exponent[noPrimeFactors] += b;
}
++noPrimeFactors;
}
++div;
}
if (a > 1) {
prime[noPrimeFactors] = a;
exponent[noPrimeFactors] = b;
++noPrimeFactors;
}
}
int lgPut(int a, int n) {
int p;
p = 1;
while (n) {
if (n & 1)
p = p * a % MOD;
a = a * a % MOD;
n >>= 1;
}
return p;
}
inline int invMod(int a) {
return lgPut(a, MOD - 2);
}
int main() {
FILE *fin, *fout;
fin = fopen("sumdiv.in", "r");
fout = fopen("sumdiv.out", "w");
int a, b;
int i, sumDiv;
fscanf(fin, "%d%d", &a, &b);
desc(a, b);
sumDiv = 1;
for (i = 0; i < noPrimeFactors; ++i)
if (prime[i] % MOD != 1) {
sumDiv = sumDiv * (lgPut(prime[i], exponent[i] + 1) + MOD - 1) % MOD;
sumDiv = sumDiv * invMod(prime[i] - 1) % MOD;
} else {
sumDiv = sumDiv * (exponent[i] + 1) % MOD;
}
fprintf(fout, "%d\n", sumDiv);
fclose(fin);
fclose(fout);
return 0;
}