zoukankan      html  css  js  c++  java
  • 埃氏筛法求素数&构造素数表求素数

    埃氏筛法求素数和构造素数表求素数是一个道理。

    首先,列出从2开始的所有自然数,构造一个序列:

    2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

    取序列的第一个数2,它一定是素数,然后用2把序列的2的倍数筛掉:

    3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

    取新序列的第一个数3,它一定是素数,然后用3把序列的3的倍数筛掉:

    5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

    取新序列的第一个数5,然后用5把序列的5的倍数筛掉:

    7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

    不断筛下去,就可以得到所有的素数。

    python实现:

     1 def _odd_iter():    //    除2以外的偶数都不是素数,所以先构造一个奇数序列generator
     2     n=1
     3     while True:
     4         n = n+2
     5         yield n
     6 
     7 
     8 def _not_divisible(n):          //   定义筛选函数,将不能够整除的数筛选出来
     9     return lambda x:x%n>0
    10 
    11 
    12 def primes():
    13     yield 2
    14     it = _odd_iter()   // 构造奇数序列
    15     while True:
    16         n = next(it)
    17         yield n
    18         it = filter(_not_divisible(n),it)   // 构造新序列
    19 
    20 for n in primes():       //  打印1000以内的素数
    21     if n<1000:
    22         print(n)
    23     else:
    24         break

    C++实现

    欲构造n(不包含)以内的素数表,

    1.开辟isPrime[n],初始化所有元素为1,isPrime[x]为1,表示x为素数

    2.令x=2

    3.如果x是素数,则对于for(i=2;i*x<n;i++) 令isPrime[i*x] = 0

    4.x++,如果x<n 重复3,否则结束

     1 #include<iostream>
     2 using namespace std;
     3 
     4 const int maxNumber = 25;
     5 
     6 int main()
     7 {
     8     int isPrime[25];
     9     int i;
    10     for(i =0;i<maxNumber;i++){
    11         isPrime[i] = 1;
    12     }     
    13     for(i = 2;i<maxNumber;i++){
    14         if(isPrime[i]){
    15             for(int x = 2;x*i<maxNumber;x++)
    16                 isPrime[x*i] = 0;  
    17         }
    18     }
    19     for(i=2;i<maxNumber;i++){
    20         if(isPrime[i])
    21                 cout<<i<<"  ";
    22     }
    23     cout<<endl;
    24     return 0;
    25 }
  • 相关阅读:
    生成唯一流水码
    搜索类
    数字转中文
    字符串转数组工具类
    类转换
    P1112 区间连续段
    P1113 同颜色询问
    Turtlebot3 机器学习
    Turtlebot2进阶教程
    turtlebot A2
  • 原文地址:https://www.cnblogs.com/ll-10/p/9695799.html
Copyright © 2011-2022 走看看