Pagini recente » Cod sursa (job #1859314) | Cod sursa (job #2799305) | Cod sursa (job #1266124) | Cod sursa (job #2655803) | Cod sursa (job #1853771)
#include <iostream>
#include <bitset>
using namespace std;
int const radmax = 8000;
int const modulo = 9901;
bitset<radmax> ciur; //ciur[i] == true <=> composed number
int primes[radmax], nprimes;
int a, b;
void computeciur() {
primes[0] = 2;
nprimes = 1;
for (int i = 3; i < radmax; i += 2) {
if (ciur[i] == 0) {
primes[nprimes] = i;
nprimes++;
if (1LL * i * i < radmax) {
int j = i * i;
while (j < radmax) {
ciur[j] = 1;
j += 2 * i;
}
}
}
}
}
void gcd(int &x, int &y, int a, int b) {
if (!b)
x = 1, y = 0;
else {
gcd(x, y, b, a % b);
long aux = x;
x = y;
y = aux - y * (a / b);
}
}
int effpower(int a, int b) {
if (b == 0)
return 1;
else {
int result = effpower(a, b >> 1);
if ((b & 1) == 0)
return (result * result) % modulo;
else
return (((result * result) % modulo) * a) % modulo;
}
}
void decompose(int n) {
int invers, y;
int sumadiv = 1;
int i = 0;
while (i < nprimes && (primes[i] * primes[i] <= n)) {
if (n % primes[i] == 0) {
int npow = 0;
while (n % primes[i] == 0) {
npow++;
n /= primes[i];
}
npow *= b;
int powerterm = (effpower(primes[i] % modulo, npow + 1) - 1) % modulo;
if (powerterm <= 0) {
powerterm = modulo + powerterm % modulo;
}
// int invers2 = pow(primes[i] - 1, modulo - 2) % modulo;
gcd(invers, y, primes[i] - 1, modulo);
if (invers <= 0)
invers = modulo + invers % modulo;
sumadiv = (((sumadiv * powerterm) % modulo) * invers) % modulo;
}
i++;
}
if (1 < n) {
int powerterm = (effpower(n % modulo, b + 1) - 1) % modulo;
// int invers2 = pow(primes[i] - 1, modulo - 2) % modulo;
gcd(invers, y, (n - 1) % modulo, modulo);
if (invers <= 0)
invers = modulo + invers % modulo;
sumadiv = (((sumadiv * powerterm) % modulo) * invers) % modulo;
}
if (sumadiv < 0) {
sumadiv = modulo + sumadiv % modulo;
}
printf("%d\n", sumadiv % modulo);
}
int main() {
freopen("sumdiv.in", "rt", stdin);
freopen("sumdiv.out", "wt", stdout);
computeciur();
scanf("%d %d", &a, &b);
decompose(a);
return 0;
}