博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
埃拉托列尼塞算法(求质数)
阅读量:3960 次
发布时间:2019-05-24

本文共 1099 字,大约阅读时间需要 3 分钟。

埃拉托列尼赛算法

  1. 算法描述:对于给定的数n;求在2~n之间的质数。
  2. 算法过程
    举例说明,求2~12的质数;
    第一次:2 3 4 5 6 7 8 9 10 11 12(开始用2除后面的,可以除尽的抹去)
    第二次:2 3 5 7 9 11 (开始用3除后面的,可以除尽的抹去)
    第三次: 2 3 5 7 11 (开始用5除后面的,可以除尽的抹去)
    第四次: 2 3 5 7 11 (开始用7除后面的,可以除尽的抹去)
    第五次: 2 3 5 7 11 (11后面没有数了,不再进行)
    第五次即为最后结果;但实际上我们发现其实第三次就不用往后面走了,原因如下:
    如果当前除数为p,那么他后面可以被他整除的只有p2,p3,…,但观察发现其实
    p2,p3,…,p*(p-1)为止,都是p以前的数检查过了,该抹去的也抹去了,因此从
    pp开始即可,那么当pp大于n时,就没必要在进行下去了,也就是说上面第三次时,
    其实5*5>12了,就应该停止了。
    相信你对该算法已经掌握了,下面上代码:(c++)
#include
using namespace std;//埃拉脱色尼塞算法求质数struct Array{
int exist; int number;};Array a[100];void Find(int n){
for (int i=1;i<=n;i++) {
a[i].exist=1; a[i].number=i; } int i=2;//用来指示当前的倍数的下标 int t; int j; int number; while(a[i].number*a[i].number<=n) {
for(j=i+1;j<=n;j++) {
if(a[j].exist==1&&a[j].number%a[i].number==0) a[j].exist=0; } i++; while(a[i].exist!=1) i++; } for (int i=2;i<=n;i++) {
if(a[i].exist==1) cout<
<<" "; }}int main(){
Find(25);}

共同学习!

转载地址:http://xilzi.baihongyu.com/

你可能感兴趣的文章
服务端使用c++实现websocket协议解析及通信
查看>>
C# string.Format使用说明
查看>>
Linux下安装Mysql数据库开发环境
查看>>
Linux用户及用户组添加和删除操作
查看>>
通用 Makefile 的编写方法以及多目录 makefile 写法
查看>>
C++的4种智能指针剖析使用
查看>>
RPC框架实现之容灾策略
查看>>
Docker私库
查看>>
hdu——1106排序(重定向)
查看>>
hdu——1556Color the ball(树状数组)
查看>>
hdu——1541Stars(树状数组)
查看>>
快速幂的精简代码
查看>>
求大数乘方的前n位数字(对数加快速幂)
查看>>
hdu——2602Bone Collector(第一类背包问题)
查看>>
hdu——1711Number Sequence(kmp专练)
查看>>
strstr函数和find函数的异同
查看>>
Java的反射
查看>>
HTTP请求之POST与GET区别
查看>>
SSM结合Redis
查看>>
优化数据库的八种方法
查看>>