构造
很容易想到的一个思路,然后用插板法即可
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
typedef long long ll;
int n,m;
ll mod=1e9+7;
ll ksm(int x,int pow){
ll ans=1,res=x;
while(pow){
if(pow&1) ans=ans*res%mod;
res=res*res%mod;
pow>>=1;
}
return ans;
}
ll ny(ll x){
return ksm(x,mod-2);
}
ll C(int x,int y){
ll ans=1,ans2=1;
for(int i=x;x-i+1<=y;i--){
ans=1ll*i*ans%mod;
}
for(int i=1;i<=y;i++){
ans2=1ll*i*ans2%mod;
}
return ans*ny(ans2)%mod;
}
int main(){
scanf("%d%d",&n,&m);
int xx=sqrt(m),tp=1,mx=max(xx,n);
for(int i=xx;i>=1;i--){
int xxx=i*i;
if(m%xxx==0){
tp=i;
break;
}
}
int noww=tp;
int ans=C(noww+n-1,n-1);
printf("%d",ans);
}