Pagini recente » Cod sursa (job #1965125) | Cod sursa (job #494275) | Cod sursa (job #389471) | Cod sursa (job #512603) | Cod sursa (job #3233458)
#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>
using namespace std;
const int MOD = 9901;
// Funcție pentru a calcula exponențierea modulară
long long modExp(long long base, long long exp, long long mod) {
long long result = 1;
while (exp > 0) {
if (exp % 2 == 1) {
result = (result * base) % mod;
}
base = (base * base) % mod;
exp /= 2;
}
return result;
}
// Funcție pentru a calcula suma puterilor divizorilor primi
long long sumPrimePowers(long long p, long long e) {
if (e == 0) return 1;
if (e == 1) return (1 + p) % MOD;
long long half = sumPrimePowers(p, e / 2);
long long sum = (half * (1 + modExp(p, e / 2 + 1, MOD))) % MOD;
if (e % 2 == 1) {
sum = (sum + modExp(p, e, MOD)) % MOD;
}
return sum;
}
// Funcție pentru a calcula suma divizorilor lui A^B
long long sumDivisors(long long A, long long B) {
long long result = 1;
for (long long i = 2; i * i <= A; ++i) {
if (A % i == 0) {
long long count = 0;
while (A % i == 0) {
A /= i;
count++;
}
result = (result * sumPrimePowers(i, count * B)) % MOD;
}
}
if (A > 1) {
result = (result * sumPrimePowers(A, B)) % MOD;
}
return result;
}
int main() {
ifstream inFile("sumdiv.in");
ofstream outFile("sumdiv.out");
long long A, B;
inFile >> A >> B;
long long result = sumDivisors(A, B) % MOD;
outFile << result << endl;
inFile.close();
outFile.close();
return 0;
}