Pagini recente » Cod sursa (job #1999898) | Cod sursa (job #242598) | Diferente pentru utilizator/stargold2 intre reviziile 204 si 205 | Istoria paginii runda/ada29/clasament | Cod sursa (job #2657974)
#include <iostream>
#include <fstream>
#include <cassert>
using namespace std;
int MOD = 9901;
bool isPrime[100001];
int prime[100001];
long long expBySq(long long x, long long n) {
if (n == 0) {
return 1;
} else if (n % 2 == 0) {
return expBySq((x * x) % MOD, n / 2);
} else {
return (x * expBySq((x * x) % MOD, (n - 1) / 2)) % MOD;
}
}
int main()
{
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
int e = 100000, 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 = expBySq(product, B + 1);
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;
}
assert(sum >= 0);
fout << sum;
return 0;
}