zoukankan      html  css  js  c++  java
  • 关于埃拉托色尼筛选法的整理(质数问题)

    求素数的问题也有不少的算法,埃拉托色尼筛选法应该算是时间复杂度不大的一种算法。。。。

    比如要求从1到n范围内的素数表,基本算法思想就是从第一个质数2开始,把2的所有倍数标记为非素数,然后进入到3,把3的所有倍数标记为非素数,然后跳过4(因为4是2的倍数而且已经被标记为非素数了),然后进入到5,把5的所有倍数标记为非素数,循环直至结束。

        以上算法还可以继续改进,那就是最外层循环可以只遍历到根号n就行了。因为大于根号n的数要么是素数,要么就有一个小于根号n的因数(而这是不可能发生的,因为如果它有小于根号n的因数的话,那他就已经被筛掉了)。

        代码如下所示:

     1 #include<iostream>
     2 #include<cstdio>
     3 #define N 10000
     4 using namespace std;
     5 int main()//从2开始往后看,凡是2,3,5的倍数全部筛掉
     6 {
     7     int i,j,k,a[N];
     8     for(i=2;i<N;i++)
     9         a[i]=1;
    10     for(i=2;i<N;i++)
    11     {
    12         if(a[i])
    13             for(j=i;i*j<N;j++)
    14             {
    15                 k=i*j;
    16                 a[k]=0;
    17             }
    18     }
    19     for(i=2;i<N;i++)
    20         if(a[i])
    21             printf("%d ",i);
    22     return 0;
    23 }
  • 相关阅读:
    python利用ffmpeg工具将视频帧推流至rtsp
    高斯曲线拟合
    Fast角点检测
    Harris角点检测和ShiTomasi角点检测
    python赋值,浅拷贝,深拷贝
    自适应阈值二值化
    Queue模块
    threading模块
    pycharm2020.3.3安装使用教程(2021.5.2更新)
    值得推荐的C/C++框架和库
  • 原文地址:https://www.cnblogs.com/guohaoyu110/p/6357561.html
Copyright © 2011-2022 走看看