zoukankan      html  css  js  c++  java
  • 线性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 }
  • 相关阅读:
    SQL Server控制语句
    MATLAB中取整函数(fix, floor, ceil, round)的使用
    MATLAB程序设计
    Thinking In Java<<Java编程思想>>
    Boost::bimap
    MySQL学习随笔1
    Boost 1_42_0在windows下的编译及其设置
    MySQL执行mysql脚本及其脚本编写
    Pygame介绍
    Erlang
  • 原文地址:https://www.cnblogs.com/lzhenf/p/2300271.html
Copyright © 2011-2022 走看看