1 条题解

  • 0
    @ 2025-10-8 16:58:28

    问题转化为可重复排列数。

    对于给定的n,将其进行质因数分解为n = p1^a1 * p2^a2 * ... * pk^ak,其中p1, p2, ..., pk为不同的质因数,a1, a2, ..., ak为对应的指数。

    可重复排列数的长度len为各指数之和,即len = a1 + a2 + ... + ak。

    可重复排列数的计算公式为:ans = len! / (a1! * a2! * ... * ak!)。

    /*
    问题转化为可重复排列数 
    n=p1^a1 *p2^a2 ……pk^ak
    
    len=a1+a2+a3……+ak
    
    ans= fac[len] /  ( fac[a1]*fac[a2]*……*fac[ak]   ) 
    
    */ 
    
    #include <bits/stdc++.h>
    using namespace std;
    typedef unsigned long long ULL;
    ULL fac[25];
    int main()
    {
        fac[0]=1;for(int i=1;i<=20;i++) fac[i]=fac[i-1]*i;
        int n;
        while(scanf("%d", &n)!=EOF)
        {
            int len=0;
    		ULL s=1;
            for(int i=2;i*i<=n;i++)if(n%i==0) {
                int t=0;
                while(n%i==0){n/=i;t++;}
                len+=t;
                s*=fac[t];
            }
            if(n>1)len++;
            ULL ans=fac[len]/s;
            printf("%d %llu\n", len, ans);
        }
        return 0;
    }
    
    • 1

    *【组合数:可重复排列】X-factor Chain[POJ3421]

    信息

    ID
    1769
    时间
    1000ms
    内存
    512MiB
    难度
    6
    标签
    递交数
    156
    已通过
    44
    上传者