考虑到序列中每一个数都必须是前一个的倍数
所以每个质因子数必然会且只会被在一个位置乘上一次
所以序列的最长就是质因子的个数
而对于方案数
考虑到对于第个数
那么就有个位置还可以放
那么方案数就要乘上
那么所以算下来就是
所以方案数就是
#include<bits/stdc++.h>
using namespace std;
inline int read(){
char ch=getchar();
int res=0;
while(!isdigit(ch))ch=getchar();
while(isdigit(ch)) res=(res<<3)+(res<<1)+(ch^48),ch=getchar();
return res;
}
#define ll long long
ll fac[25];
int prime[2000000],cnt;
bool vis[2000005];
int x;
inline void init(){
fac[0]=fac[1]=1;
for(int i=2;i<=22;i++){
fac[i]=fac[i-1]*i;
}
}
inline void getprime(){
for(int i=2;i<=2000000;i++){
if(!vis[i]){
prime[++cnt]=i;
for(int j=i;j<=2000000;j+=i){
vis[j]=true;
}
}
}
}
int main(){
init();
getprime();
while(scanf("%d",&x)!=EOF){
ll tot=0,ans=1;
for(int i=2;i*i<=x;i++){
int num=0;
while(x%i==0){
num++;x/=i;
}
tot+=num;ans*=fac[num];
}
if(x>1)tot++;
cout<<tot<<" ";
cout<<fac[tot]/ans<<'
';
}
}