设$A=p_1^{\alpha _1} \cdot p_2^{\alpha _2} \cdots p_k^{\alpha _k}$,则约数个数为$(1+p_1^1+p_1^2+\cdots+p_1^{\alpha _1})(1+p_2^1+p_1^2+\cdots+p_2^{\alpha _2})\cdots (1+p_k^1+p_k^2+\cdots+p_k^{\alpha _k})$
因此要求$p^0+p^1+\cdots +p^k$,即其值为$sum(p,k+1)$,则
$$
sum(p,k)=p^0+p^1+\cdots +p^{k-1}=
\begin{cases}
(p^0+p^1+\cdots +p^{\frac k 2 -1})+(p^{\frac k 2}+p^{\frac k 2+1}+\cdots+p^{k-1})=sum(p,\frac k 2)+p^{\frac k 2} \times sum(p,\frac k 2) = (1+p^{\frac k 2})\times sum(p,\frac k 2) & \text{ if } k为偶数 \\
(p^0+p^1+\cdots+p^{k-2})+p^{k-1}=sum(p,k-1)+p^{k-1} & \text{ if } k为奇数
\end{cases}
$$
#include<bits/stdc++.h>
using namespace std;
const int N=1005,mod=9901;
int a,b;
int p[N],num[N],idx,ans=1;
void divide(int x){
for(int i=2;x>1;i++){
if(x%i==0){
int cnt=0;
while(x%i==0){
cnt++;
x/=i;
}
p[++idx]=i,num[idx]=cnt;
}
}
}
int qkpow(int x,int k){
if(k==0)return 1;
int t=qkpow(x,k>>1);
if(k&1)return 1ll*t*t*x%mod;
return 1ll*t*t%mod;
}
int count(int x,int k){
return (1-qkpow(x,k+1))/(1-x);
}
int sum(int x,int k){
if(k==1)return 1;
if(k%2==0)return 1ll*(1+qkpow(x,k>>1))*sum(x,k>>1)%mod;
return 1ll*(sum(x,k-1)+qkpow(x,k-1))%mod;
}
int main(){
cin >> a >> b;
//分解质因数
divide(a);
//求每一个质因数的sum
for(int i=1;i<=idx;i++){
ans=1ll*ans*(sum(p[i],num[i]*b+1))%mod;
}
if(!a)ans=0;
cout << ans;
return 0;
}