解题思路:
等比数列 & 乘法逆元
Accepted code:
#include#include #include #define YMW 9901using namespace std;typedef long long ll;ll a,b,ans=1;ll ksm(ll x,ll y){ ll ans=1; x%=(YMW); while (y){ if (y&1) ans=ans*x%(YMW); x=x*x%(YMW); y>>=1; } return ans;}ll answer(ll x,ll y){ if ((x-1)%(YMW)==0) return (y+1)%(YMW); int a=(ksm(x,y+1)+9900)%(YMW); int b=ksm(x-1,9899); return a*b%(YMW);}void read(ll &f) { f=0; char c=getchar(); while(!isdigit(c)) c=getchar(); while(isdigit(c)) f=(f<<1)+(f<<3)+c-48,c=getchar(); return;}int main(){ read(a); read(b); int N=sqrt(a); for (ll i=2;i<=N;i++) if (a%i==0){ ll sum=0; while (a%i==0) sum++,a/=i; ans=ans*answer(i,sum*b)%(YMW); } if (a>1) ans=ans*answer(a,b)%(YMW); printf("%lld",ans%(YMW)); return 0;}