zoukankan      html  css  js  c++  java
  • poj3421 X-factor Chains——分解质因数

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

    好久没有独立A题了...做点水题还是有助于提升自信心的;

    这题就是把 x 质因数分解,质因数指数的和 sum 就是最长的长度,因为每次至少乘一个质因数;

    排列方式就是从 sum 个位置里给第一种质因数选几个位置,再在剩下的里面给第二种质因数选几个位置...

    也就是 ans = ∏(1<=i<=cnt) C(n,pc[i]),n -= pc[i],其中 cnt 是质因数(种类)个数,pc 是每种质因数的指数,n 就是目前剩下几个位置。

    代码如下:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    typedef long long ll;
    int x,p[25],pc[25],cnt;
    void divide(int n)
    {
        cnt=0;
        memset(pc,0,sizeof pc);
        for(int i=2;i*i<=n;i++)
            if(n%i==0)
            {
                p[++cnt]=i;
                while(n%i==0)pc[cnt]++,n/=i;
            }
        if(n>1)p[++cnt]=n,pc[cnt]=1;
    }
    ll C(int n,int m)
    {
        if(n<m)return 0;
        m=min(m,n-m);
        ll a=1,b=1;
        for(int i=n-m+1;i<=n;i++)a*=i;
        for(int i=2;i<=m;i++)b*=i;
        return a/b;
    }
    int main()
    {
        while(~scanf("%d",&x))
        {
            divide(x);
            int sum=0; ll ans=1;
            for(int i=1;i<=cnt;i++)sum+=pc[i];
            int n=sum;
            for(int i=1;i<=cnt;i++)
            {
                ans*=C(n,pc[i]);
                n-=pc[i];
            }
            printf("%d %lld
    ",sum,ans);
        }
        return 0;
    }
  • 相关阅读:
    Oracle SQL Developer 设置自动提示(完成设置)
    访问控制修饰符
    BigDecimal.valueOf
    Use try-with-resources
    python学习之字符编码
    python语法:
    python学习之环境搭建 输入输出
    C51存储的优化
    c51中的bit,SBIT
    关于IO模拟时序(SPI)的注意事项
  • 原文地址:https://www.cnblogs.com/Zinn/p/9264971.html
Copyright © 2011-2022 走看看