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 }
  • 相关阅读:
    vue_03
    vue03
    vue2
    vue02
    vue 01
    JavaScript要点 (一) 变量-作用域
    在iOS应用程序中打开设备设置界面及其中某指定的选项界面
    多线程操作Coredata(转)
    iOS_城市定位
    本地验证码
  • 原文地址:https://www.cnblogs.com/mrsheep/p/7898803.html
Copyright © 2011-2022 走看看