【POJ】3421

来源:互联网 发布:三星手机恢复软件 编辑:程序博客网 时间:2024/05/19 01:10

http://poj.org/problem?id=3421

将一个数X分解成从1到X的数列,前一个数可以整除后一个数,求最大链长和链的个数。

#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <queue>#include <vector>#include <numeric>#include <algorithm>using namespace std;vector <int> prime_factor_time(int n){    vector <int> v;    for (int i=2;i*i<=n;i++){        int t=0;        while (n%i==0){            t++;            n/=i;        }        v.push_back(t);    }    if (n!=1){        v.push_back(1);    }    return v;}long long factor(int n){    long long res=1;    for (int i=1;i<=n;i++){        res*=i;    }    return res;}int main(){    int n;    while (cin >> n){        vector <int> f=prime_factor_time(n);        int len= accumulate(f.begin(),f.end(),0);        long long num=factor(len);        for (vector <int>::iterator it=f.begin();it!=f.end();it++){            num/=factor(*it);        }        cout << len << " " << num << endl;    }}