Pagini recente » Cod sursa (job #2881416) | Cod sursa (job #396272) | Cod sursa (job #2480772) | Cod sursa (job #2718859) | Cod sursa (job #2658007)
#include <iostream>
#include <fstream>
#include <cassert>
using namespace std;
int MOD = 9901;
bool isPrime[10001];
int prime[10001];
long long expBySq (long long a, long long b) {
long long rez = 1;
while (b != 0) {
if (b % 2 == 0) {
a = (a * a) % MOD;
b = b / 2;
}
else {
rez = (rez * a) % MOD;
a = (a * a) % MOD;
b = (b - 1) / 2;
}
}
return rez;
}
int main()
{
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
int e = 10000, 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;
while (A % prime[i] == 0) {
A = A / prime[i];
product *= prime[i];
}
newProduct = (prime[i] * expBySq(product, B)) % MOD;
sum = (sum * (newProduct - 1) * expBySq(prime[i] - 1, MOD - 2)) % MOD;
}
if (A > 1) {
newProduct = expBySq(A, B + 1);
sum = (sum * (newProduct - 1) * expBySq(A - 1, MOD - 2)) % MOD;
}
if (sum < 0) sum += MOD;
fout << sum;
return 0;
}