AcWing 1295. X的因子链
原题链接
中等
作者:
乡村守望者
,
2020-03-26 20:25:22
,
所有人可见
,
阅读 633
/*
数论题:自然想到了分解质因数
求最大长度其实就是质因数的指数和
求方案数 可以发现只要满足每一个质因数的k次方递增的顺序是递增排列的就可
全排列下内部有序就可 n!/(p1!p2!....)
*/
#include<iostream>
#include<cstring>
using namespace std;
const int N = (1<<20)+10;
int sum[N];
int n;
int tot;
int main()
{
while(cin>>n)
{
tot=0;
//memset(sum,0,sizeof sum); 大概10^6 若是100组数据 直接就超时了 但是可以发现sum用的数量是很少的
//只需要每次又要使用之前清零就行了
int k=0;
for(int i=2;i<=n/i;++i)
{
if(n%i==0)
{
sum[k]=0;
while(n%i==0)
{
n/=i;
sum[k]++;
tot++;
}
k++;
}
}
if(n>1){
sum[k]=0;
sum[k]++;
tot++;
k++;
}
long long res = 1;
for(int i=1;i<=tot;++i)res*=i;
for(int i=0;i<k;++i)
for(int j=1;j<=sum[i];++j)
res/=j;
cout<<tot<<" "<<res<<endl;
}
return 0;
}