Pagini recente » Istoria paginii utilizator/andy94 | Istoria paginii utilizator/mindrualexandru | Istoria paginii utilizator/smaranda2002 | Statistici George Buzoianu (georgeb) | Cod sursa (job #434319)
Cod sursa(job #434319)
#include <cstdio>
const int MOD = 9901;
long long A, B;
long long pw(long long a, long long p)
{
long long rez = 1;
a = a % MOD;
for(; p ; p = p>>1)
{
if(p & 1)
rez = (rez * a) % MOD , p--;
a = (a * a) % MOD;
}
return rez;
}
void rezolva()
{
long long n = A;
long long S = 1;
for(long long i = 2 ; i * i <= A ; i++)
if(n % i == 0)
{
int exp = 0;
while(n % i == 0)
{
n /= i;
exp++;
}
if (n % MOD == 1)
S = (S * (exp * B + 1)) % MOD;
else
S = ((S * pw(i, B * exp + 1) + MOD - 1) % MOD * pw(i - 1, MOD - 2)) % MOD;
}
if(n > 1)
if (n % MOD == 1)
S = (S * (B + 1)) % MOD;
else
S = ((S * (pw(n, B + 1) + MOD - 1) % MOD) * pw(n - 1, MOD - 2)) % MOD;
printf("%lld", S);
}
int main()
{
freopen("sumdiv.in","r",stdin);
freopen("sumdiv.out","w",stdout);
scanf("%lld%lld",&A,&B);
rezolva();
return 0;
}