Pagini recente » Cod sursa (job #65532) | Cod sursa (job #1606904) | Cod sursa (job #2320655) | Cod sursa (job #2764819) | Cod sursa (job #3002029)
#include <fstream>
using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
const int MOD = 9901;
int S = 1; ///suma divizorilor (care are formula de tip produs)
int powlg (int a, int p)
{
int v = 1;
while (p)
{
if (p & 1)
v = v * a % MOD;
a = a * a % MOD;
p >>= 1;
}
return v;
}
inline int invMod (int x)
{
return powlg(x, MOD - 2);
}
void add(int d, int n)
{
int x = d % MOD;
if (x == 0) return; ///S = S * 1;
if (x == 1)
S = S * (n + 1) % MOD;
else
S = S * (powlg(x, n + 1) + MOD - 1) % MOD * invMod(x - 1) % MOD; ///x^(n + 1) - 1 / (x - 1) ///adunam MOD ca sa evitam ca restul sa fie -1 sau neg;
}
int main()
{
int A, B, p;
f >> A >> B;
for (int d = 2 ; d * d <= A; d++)
{
if (A % d == 0)
{
p = 0;
do
{
p++;
A /= d;
}
while (A % d == 0);
add(d, B * p);
}
}
if (A > 1) add (A, B);
g << S;
return 0;
}