1628:X-factor Chain
时间限制: 1000 ms 内存限制: 524288 KB
提交数: 122 通过数: 68
【题目描述】
原题来自 POJ 3421
输入正整数 x
,求 x 的大于 1
的因子组成的满足任意前一项都能整除后一项的序列的最大长度,以及满足最大长度的序列的个数。
【输入】
多组数据,每组数据一行,包含一个正整数 x
。
【输出】
对于每组数据,输出序列的最大长度以及满足最大长度的序列的个数。
【输入样例】
2 3 4 10 100
【输出样例】
1 1 1 1 2 1 2 2 4 6
【提示】
数据范围与提示:
对于全部数据,1≤x≤220
。
如果我没有搞错的话,这道题应该算得上是结论题?挺简单的
序列长度就是该数的每一个质因子的次幂之和(稍微想想就能明白),而排列总数就是组合数学中的不全相异元素的排列。
#include<bits/stdc++.h> using namespace std; #define ll long long const int N=22; ll n,jc[N+1]={1}; inline void solve(int x) { ll ans=0,cnt,k=1; for(ll i=2;i*i<=x;i++) { if(x%i==0) { cnt=0; while(x%i==0) { cnt++; x/=i; }ans+=cnt; k*=jc[cnt]; } } if(x>1) ans++; printf("%lld %lld ",ans,jc[ans]/k); } int main() { for(int i=1;i<=N;i++) jc[i]=jc[i-1]*i; while(~scanf("%d",&n)) { solve(n); } return 0; }