Pagini recente » Cod sursa (job #560457) | Monitorul de evaluare | Cod sursa (job #2974822) | Clasamentul arhivei de probleme | Cod sursa (job #2985140)
#include <fstream>
using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
const long long MOD = 9901;
long long factPrim[10], expPrim[10];
long long nrPrim;
long long lgPut(long long a, long long b) {
long long res = 1;
a %= MOD;
while(b) {
if(b & 1) {
res = (res * a) % MOD;
b--;
}
a = (a * a) % MOD;
b /= 2;
}
return res;
}
int main()
{
long long a, b;
f >> a >> b;
/// 18 3
/// 18 = 2 ^ 1 * 3 ^ 2
/// 18^3 = 2 ^ 3 * 3 ^ 6
if(a % 2 == 0) {
factPrim[++nrPrim] = 2;
while(a % 2 == 0) {
a /= 2;
expPrim[nrPrim]++;
}
}
for(long long i = 3; i*i <= a; ++i) {
if(a % i == 0) {
factPrim[++nrPrim] = i;
while(a % i == 0) {
a /= i;
expPrim[nrPrim]++;
}
}
}
if(a > 1) {
factPrim[++nrPrim] = a;
expPrim[nrPrim] = 1;
}
long long sum = 1;
for(long long i = 1; i <= nrPrim; ++i) {
expPrim[i] *= b;
sum = (sum * lgPut(factPrim[i], expPrim[i] + 1) + MOD - 1) % MOD;
sum = (sum * lgPut(factPrim[i] - 1, MOD - 2)) % MOD;
}
g << sum;
return 0;
}