讲的非常详细,业界良心博主
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<math.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll __int64
ll a[10000],b[10000];
ll mod=9901;
ll quickpow(ll m,ll n,ll k)
{
ll b = 1;
while (n > 0)
{
if (n & 1)
b = (b*m)%k;
n = n >> 1 ;
m = (m*m)%k;
}
return b;
}
ll com(ll p,ll n)
{
if(n==1) return (1+p)%mod;
if(n==0) return 1;
if(n&1) return ((com(p,n/2)%mod)*(1+quickpow(p,n/2+1,mod))%mod)%mod;
else return ((((com(p,n/2-1)%mod)*(1+quickpow(p,n/2,mod))%mod)%mod)+quickpow(p,n,mod)%mod)%mod;
}
int main()
{
ll n,m;
cin>>n>>m;
ll i,j,k=0;
memset(b,0,sizeof(b));
for(i=2;i*i<=n;)
{
if(n%i==0)
{
a[k]=i;
while(n%i==0)
{
b[k]++;
n/=i;
}
k++;
}
if(i==2) i++;
else i+=2;
}
if(n!=1)
{
a[k]=n;
b[k]=1;
k++;
}
ll ans=1;
for(i=0;i<k;i++)
{
ans=(ans*com(a[i],b[i]*m))%mod;
}
cout<<ans<<endl;
//system("pause");
}