题目描述
输入正整数 x x x,求 x x x 的大于 1 1 1 的因子组成的满足任意前一项都能整除后一项的序列的最大长度,以及满足最大长度的序列的个数。
输入格式
多组数据,每组数据一行,包含一个正整数 x x x。
输出格式
对于每组数据,输出序列的最大长度以及满足最大长度的序列的个数。
样例
样例输入
2
3
4
10
100
样例输出
1 1
1 1
2 1
2 2
4 6
数据范围与提示
对于全部数据, 1 ≤ x ≤ 2 20 1\le x\le 2^{20} 1≤x≤220。
显然答案为多重集的排列数。设 S = { n 1 ∗ a 1 , n 2 ∗ a 2 , . . , n k ∗ a k } S=\{n_1*a_1,n_2*a_2,..,n_k*a_k\} S={n1∗a1,n2∗a2,..,nk∗ak},S的全排列个数为 n ! n 1 ! n 2 ! . . . n k ! \frac{n!}{n_1!n_2!...n_k!} n1!n2!...nk!n!
#include<cstdio>
typedef unsigned long long ull;
ull fac[25];
int main()
{
//freopen("in.txt","r",stdin);
ull x,ans,cnt=0,div;fac[1]=1;
for(int i=2;i<=20;i++)fac[i]=fac[i-1]*i;
while(~scanf("%llu",&x))
{
cnt=0;div=1;
for(ull i=2;i*i<=x;i++)
if(x%i==0)
{
ull ecnt=0;
while(x%i==0)ecnt++,x/=i;
cnt+=ecnt;div*=fac[ecnt];
}
if(x>1)cnt++;
printf("%llu %llu\n",cnt,fac[cnt]/div);
}
return 0;
}
总结
组合计数