• X-factor Chains(POJ3421 素数)


    X-factor Chains
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 6212   Accepted: 1928

    Description

    Given a positive integer X, an X-factor chain of length m is a sequence of integers,

    1 = X0X1X2, …, Xm = X

    satisfying

    Xi < Xi+1 and Xi | Xi+1 where a | b means a perfectly divides into b.

    Now we are interested in the maximum length of X-factor chains and the number of chains of such length.

    Input

    The input consists of several test cases. Each contains a positive integer X (X ≤ 220).

    Output

    For each test case, output the maximum length and the number of such X-factors chains.

    Sample Input

    2
    3
    4
    10
    100

    Sample Output

    1 1
    1 1
    2 1
    2 2
    4 6
    100=2*2*5*5;
    所以最长为4,然后对2,2,5,5排列组合,但一直RE,TLE
     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 using namespace std;
     5 #define LL long long
     6 #define Max ((1<<20)+2)
     7 bool a[Max];
     8 int prime[Max];
     9 int num[Max];
    10 LL init[25];
    11 void get_prime()    //埃氏筛法选取素数
    12 {
    13     int i,j,p=0;
    14     memset(a,1,sizeof(a));
    15     a[0]=a[1]=0;
    16     for(i=2;i<=Max;i++)
    17     {
    18         if(a[i]==1)
    19         {
    20             prime[p++]=i;
    21             for(j=i*2;j<Max;j+=i)
    22                 a[j]=0;
    23         }
    24     }
    25     init[1]=1;
    26     for(i=2;i<=20;i++)
    27         init[i]=i*init[i-1];
    28     return;
    29 }
    30 int main()
    31 {
    32     int ans,n,i,j,k,u;
    33     get_prime();
    34     LL p,t;
    35     freopen("in.txt","r",stdin);
    36     while(scanf("%d",&n)!=EOF)
    37     {
    38         ans=0,k=0,t=1;
    39         i=0;
    40         while(n>1)
    41         {
    42             if(n%prime[i]==0)
    43             {
    44                 u=0;
    45                 while(n%prime[i]==0)
    46                 {
    47                     n=n/prime[i];
    48                     u++;
    49                 }
    50                 t*=init[u];
    51                 ans+=u;
    52                 k++;
    53             }
    54             if(a[n]==1)
    55             {
    56                 ans++;
    57                 break;
    58             }
    59             i++;
    60         }
    61         p=init[ans];
    62         LL s=p/t;
    63         printf("%d %I64d
    ",ans,s);
    64     }
    65     return 0;
    66 }
  • 相关阅读:
    浅谈算法和数据结构: 二 基本排序算法
    ExecuteScalar()方法的使用
    as和强制类型转换的区别
    duilib入门简明教程 -- 自绘标题栏(5)
    duilib入门简明教程 -- 响应按钮事件(4)
    duilib入门简明教程 -- 第一个程序 Hello World(3)
    duilib入门简明教程 -- VS环境配置(2)
    duilib入门简明教程 -- 前言(1)
    linux 查看 PHP 的默认版本。
    mui
  • 原文地址:https://www.cnblogs.com/a1225234/p/5187585.html
Copyright © 2020-2023  润新知