Pagini recente » Cod sursa (job #103207) | Cod sursa (job #973566) | Cod sursa (job #928405) | Cod sursa (job #2183371) | Cod sursa (job #2656856)
#include <iostream>
#include <fstream>
using namespace std;
int MOD = 9901;
bool isPrime[1000001];
int prime[1000001];
long long expBySq(long long x, long long n) {
if (n == 0) {
return 1;
} else if (n % 2 == 0) {
return expBySq(x * x, n / 2);
} else {
return x * expBySq(x * x, (n - 1) / 2);
}
}
int main()
{
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
int e = 1000000, primeCount = 0;
isPrime[0] = isPrime[1] = 1;
for (int i = 2; i <= e; ++i) {
if (isPrime[i] == 0) {
primeCount += 1;
prime[primeCount] = i;
for (int j = 2 * i; j <= e; j += i) {
isPrime[j] = 1;
}
}
}
int A, B;
fin >> A >> B;
long long sum = 1, newProduct;
for (int i = 1; i <= primeCount && 1LL * prime[i] * prime[i] <= A; ++i) {
long long product = 1;
int power = 0;
while (A % prime[i] == 0) {
A = A / prime[i];
product *= prime[i];
power += 1;
}
newProduct = expBySq(product, B + 1);
sum *= ((newProduct - 1) / (prime[i] - 1));
} if (A > 1) {
newProduct = expBySq(A, B + 1);
sum *= ((newProduct - 1) / (A - 1));
}
fout << sum % MOD << " ";
return 0;
}