思路:
直接递归求等比数列和
c o d e code code
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
long long mod=9901;
long long a, b;
long long ans=1;
long long qpow(long long x, long long k)
{
long long ans=1;
while(k)
{
if(k&1)
ans=ans*x%mod;
x=x*x%mod;
k>>=1;
}
return ans;
}
long long digui(long long x, long long k)
{
if(!k)
return 1;
if(k&1)
return digui(x, (k-1)/2)*(1+qpow(x, (k+1)/2))%mod;
else return (digui(x, k-1)+qpow(x, k))%mod;
}
int main()
{
scanf("%lld%lld", &a, &b);
for(long long i=2; i*i<=a; i++)
{
long long sum=0;
while(a%i==0)
a/=i, sum++;
if(sum!=0)
{
sum*=b;
ans=ans*digui(i, sum)%mod;
}
}
if(a!=1)
ans=ans*digui(a, b)%mod;
printf("%lld", ans);
return 0;
}