Pagini recente » Cod sursa (job #125625) | Cod sursa (job #1865965) | Cod sursa (job #1073525) | Cod sursa (job #2114313) | Cod sursa (job #1612812)
///Problema Sumdiv - InfoArena ( www.infoarena.ro/problema/sumdiv )
#include <cstdio>
#include <vector>
#define in "sumdiv.in"
#define out "sumdiv.out"
#define pb push_back
#define MOD 9901
using namespace std;
int A, B, sum = 1, sze, check;
vector <int> prim, exp;
int power(int a, int b)
{
int sol = 1;
for( ; b; b>>=1)
{
if(b&1)
{
sol = (1LL*sol*a)%MOD;
}
a = (1LL*a*a)%MOD;
}
return sol;
}
inline void build()
{
int ct = 0;
for(int i = 2; i*i <= A; ++i)
{
if(A%i) continue;
ct = 0;
prim.pb(i);
while(A%i == 0)
{
++ct;
A/=i;
}
exp.pb(ct);
}
if(A > 1)
{
if(A%MOD == 1)
{
check = 1;
return ;
}
prim.pb(A);
exp.pb(1);
}
}
inline void solve()
{
sze = prim.size();
for(int i = 0; i< sze; ++i)
{
int tmpSum = (1LL*(power(prim[i], exp[i]*B + 1) - 1 + MOD))%MOD;
tmpSum = (1LL * tmpSum * power(prim[i] - 1, MOD-2))%MOD;
sum = (1LL*sum*tmpSum)%MOD;
}
}
int main()
{
freopen(in, "r", stdin);
freopen(out, "w", stdout);
scanf("%d %d", &A, &B);
build();
solve();
if(check) sum = (1LL*sum*(B+1))%MOD;
printf("%d\n", sum);
return 0;
}