poj 3421

来源:互联网 发布:网络一对一辅导app排名 编辑:程序博客网 时间:2024/05/05 12:14

      质因子分解加排列组合。

      将一个整数分解成质因子连乘的形式,其项数是最多的。如:100=2*2*5*5,so the maximum length of X-factor chains is 4。

#include <cstdio>#include <stack>#include <set>#include <iostream>#include <string>#include <vector>#include <queue>#include <functional>#include <cstring>#include <algorithm>#include <cctype>#include <string>#include <map>#include <iomanip>#include <cmath>#define LL long long#define ULL unsigned long long#define SZ(x) (int)x.size()#define Lowbit(x) ((x) & (-x))#define MP(a, b) make_pair(a, b)#define MS(arr, num) memset(arr, num, sizeof(arr))#define PB push_back#define F first#define S second#define ROP freopen("input.txt", "r", stdin);#define MID(a, b) (a + ((b - a) >> 1))#define LC rt << 1, l, mid#define RC rt << 1|1, mid + 1, r#define LRT rt << 1#define RRT rt << 1|1#define BitCount(x) __builtin_popcount(x)#define BitCountll(x) __builtin_popcountll(x)#define LeftPos(x) 32 - __builtin_clz(x) - 1#define LeftPosll(x) 64 - __builtin_clzll(x) - 1const double PI = acos(-1.0);const int INF = 0x3f3f3f3f;using namespace std;const double eps = 1e-8;const int MAXN = 300 + 10;const int MOD = 1000007;const int M=1e5;const int N=(1<<20)+10;typedef pair<int, int> pii;typedef pair<int, string> pis;int n,p[N],vis[N];void prime()  //素数筛选,将素数放入p[]中{    int i,j,t=sqrt(N);    memset(vis,true,sizeof(vis));    vis[0]=vis[1]=false;    for (i=4;i<N;i+=2) vis[i]=false;    for (i=3;i<=t;i++)    {        if (vis[i]){            for (j=i*i;j<N;j+=i<<1) vis[j]=false;        }    }    for (i=2,j=0;i<N;i++) if (vis[i]) p[j++]=i;  }LL fact(int x){    return x<=1?1:fact(x-1)*x;}int main(){    int i,j;    prime();    while(~scanf("%d",&n))    {        int len=0,cnt=0;        LL a=1;        for (i=0;n>1;i++) {            int cnt1=0;            while(n%p[i]==0) {                cnt1++;                len++;  // 统计质因子总数                n/=p[i];            }            a*=fact(cnt1);        }        printf("%d %lld\n",len,fact(len)/a);    }    return 0;}


0 0
原创粉丝点击