zoukankan      html  css  js  c++  java
  • POJ 3421 X-factor Chains | 数论

    题意:

    给一个x,求最长的排列满足开头是1,结尾是x,前一个数是后一个数的因子

    输出长度和这样序列的个数


    题解:

    把x分解质因数,质因数个数就是答案,接下来考虑怎么求个数

    显然这是一个可重集合全排列问题,设有n个元素

    答案就是n!/每个元素出现次数的阶乘

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 typedef long long ll;
     5 #define N 2000
     6 using namespace std;
     7 int prime[N],n,cnt[N],pcnt,sum;
     8 ll jc[21];
     9 bool isp[N];
    10 void init()
    11 {
    12     memset(isp,1,sizeof(isp));
    13     isp[1]=0;
    14     for (int i=2;i<N;i++)
    15     {
    16     if (isp[i]==1)
    17         prime[++pcnt]=i;
    18     for (int j=1;j<=pcnt && i*prime[j]<N;j++)
    19     {
    20         isp[i*prime[j]]=0;
    21         if (i%prime[j]==0) break;
    22     }
    23     }
    24 }
    25 int main()
    26 {
    27     jc[0]=1;
    28     for (int i=1;i<=20;i++)
    29     jc[i]=jc[i-1]*i;
    30     init();
    31     while (scanf("%d",&n)!=EOF)
    32     {
    33     ll ans=0;
    34     memset(cnt,0,sizeof(cnt));
    35     sum=0;
    36     for (int i=1;i<=pcnt;i++)
    37     {
    38         if (n==1) break;
    39         while (n%prime[i]==0)
    40         n/=prime[i],cnt[i]++,sum++;
    41     }
    42     if (n>1)
    43         sum++;
    44     ans=jc[sum];
    45     for (int i=1;i<=pcnt;i++)
    46         ans/=jc[cnt[i]];
    47     printf("%d %lld
    ",sum,ans);
    48     }
    49     return 0;
    50 }
  • 相关阅读:
    监控文件变化
    哈希+ LIst + 流文件 应用
    (转)Delphi版木马彩衣一个简单的花指令伪装器
    (转)TThread 详解
    遍历菜单
    哈希 + LIST简单应用(DELPHI)
    WINDOWS API速查
    ASP.NET 3.5的页面指令
    感冒怎么治?
    ASPNET应用程序文件夹
  • 原文地址:https://www.cnblogs.com/mrsheep/p/7898803.html
Copyright © 2011-2022 走看看