Pagini recente » Cod sursa (job #1918225) | Cod sursa (job #2834850) | Cod sursa (job #2876055) | Cod sursa (job #2116461) | Cod sursa (job #1913953)
#include <cstdio>
#include <vector>
#define MOD 9901
using namespace std;
vector<pair<int, int> > p_fact;
long long rid_putere(int A, int n)
{
long long p = 1;
while(n)
{
if(n & 1)
{
n--;
p = (p * A) % MOD;
}
A = (A * A) % MOD;
n>>=1;
}
return p;
}
int main()
{
int np=0,A,B,i;
freopen("sumdiv.in","r",stdin);
freopen("sumdiv.out","w",stdout);
scanf("%d%d",&A,&B);
//prime factorization A
if(A%2==0)
{
np++;
p_fact.push_back(make_pair(2,1));
A=A/2;
while(A%2==0)
{
p_fact[0].second++;
A=A/2;
}
}
for(i=3;i*i<=A;i+=2)
{
if(A%i==0)
{
np++;
p_fact.push_back(make_pair(i,1));
A=A/i;
while(A%i==0)
{
p_fact[np-1].second++;
A=A/i;
}
}
}
if(A>1)
{
np++;
p_fact.push_back(make_pair(A,1));
}
//
long long m,sol = 1;
for(i=0;i<np;i++)
{
m = p_fact[i].second*B;
if(p_fact[i].first % MOD == 1)
{
sol = (sol + m + 1) % MOD;
}
else
{
sol = (sol * rid_putere(p_fact[i].first,m+1) - 1) % MOD;
sol = (sol * rid_putere(p_fact[i].first - 1, MOD - 2) ) % MOD;
}
}
printf("%lld",sol);
}