• 线性O(N)时间复杂度求素数 , 筛法


     1 /*
    2 线性时间求出1-N 的素数 , 时间复杂度为O( N) ;
    3 一个合数可以表示成若干个素数的积
    4 比如说 i = 6 =2 * 3 , A = p1 * p2 * p3 .. * pn , 其中pi为素数 ,p1最小 , 只筛到p1 * i即可
    5 我们只筛 最小的 2 * i 不筛3 * i ;
    6 */
    7 #include <stdio.h>
    8 #include <memory.h>
    9 const int MaxNum = 100000;
    10
    11
    12 bool isPrime[MaxNum] ; //数组定义该数字是否为素数
    13 int prime[ MaxNum ] ; // 存下素数
    14 int total = 0 ; //第几个素数
    15
    16 void seive( int Max )
    17 {
    18 memset( isPrime , true , sizeof( isPrime ));
    19 memset( prime , 0 , sizeof( prime ));
    20 isPrime[0 ] = false ;
    21 isPrime[1] = false ;
    22 for ( int i = 2 ; i <= Max ; i++ )
    23 {
    24 if ( isPrime[i] )
    25 prime[ ++ total ] = i ;
    26 for ( int j = 1 ; j <= total && i * prime[j] <= Max ; j++)
    27 {
    28 isPrime[ i * prime[j] ] = false ;
    29 if (!( i % prime[j])) break;
    30 }
    31 }
    32 }
    33 int main()
    34 {
    35 int input;
    36 seive( MaxNum );
    37 while ( scanf("%d" , &input ) , input )
    38 {
    39
    40 printf( "%d" , prime[ input ]);
    41 }
    42 return 0 ;
    43 }
  • 相关阅读:
    Kera高层API002
    Kera高层API
    手写数字问题实战(层)
    函数优化实战
    反向传播算法
    链式法则
    多输出感知机及其梯度
    JDBC
    mysql查询操作1
    内部类
  • 原文地址:https://www.cnblogs.com/lzhenf/p/2300271.html
Copyright © 2020-2023  润新知