Pagini recente » Cod sursa (job #1315051) | Cod sursa (job #2695158) | Cod sursa (job #2822041) | Cod sursa (job #1212882) | Cod sursa (job #1016187)
#include <cstdio>
#include <bitset>
using namespace std;
const int Nmax = 10000;
const int MOD = 9901;
const long long LL = 1;
int A,B,is_prime[1300],nrp;
bitset<Nmax> used;
void precalc()
{
int i,j;
is_prime[nrp++] = 2;
for(i = 1 ; 2*i+1 <= Nmax ; ++i)
if(!used[2*i+1]){
is_prime[nrp++] = 2*i+1;
for(j = 1; (2*i+1)*(2*j+1) <= Nmax ; ++j)
used[(2*i+1)*(2*j+1)] = 1;
}
scanf("%d%d",&A,&B);
}
int lg_put(int a,int b)
{
int x1 = a,x2 = 1 ;
if(b==0)return 1;if(b==1)return a;
while(b>1)
{
if(b&1)
x2 = (LL*x2*x1)%MOD,--b;
else
x1 = (LL*x1*x1)%MOD,(b>>=1);
}
return (LL * x1 * x2)%MOD;
}
int calc (int x, int y)
{
if (x % MOD == 1)
return (y + 1) % MOD;
int sol = lg_put(x, y + 1) - 1;
sol = sol * lg_put(x - 1, 9899) % MOD;
return sol;
}
void solve()
{
int p = 0, sd = 1, nr,num;
for(int i = 0; is_prime[i]*is_prime[i] <= A ; ++i )
{
p = 0;
while(A % is_prime[i] == 0)
{
A /= is_prime[i];
++p;
}
if(p)
sd = (sd * calc(is_prime[i],p * B)) % MOD;
}
if(A > 1)
sd = (sd * calc(A,B))% MOD ;
printf("%d",sd);
}
int main()
{
freopen("sumdiv.in","r",stdin);
freopen("sumdiv.out","w",stdout);
precalc();
solve();
return 0;
}