正文

Eratosthenes筛法求1-100之间的素数2008-08-10 13:03:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/bclz/37462.html

分享到:

/*写出不超过100的所有的素数。解  将不超过100的正整数排列如下: 1   2   3   4   5   6   7   8   9  1011  12  13  14  15  16  17  18  19  2021  22  23  24  25  26  27  28  29  3031  32  33  34  35  36  37  38  39  4041  42  43  44  45  46  47  48  49  5051  52  53  54  55  56  57  58  59  6061  62  63  64  65  66  67  68  69  7071  72  73  74  75  76  77  78  79  8081  82  83  84  85  86  87  88  89  9091  92  93  94  95  96  97  98  99  100按以下步骤进行:(ⅰ)  删去1,剩下的后面的第一个数是2,2是素数;(ⅱ)  删去2后面的被2整除的数,剩下的2后面的第一个数是3,3是素数;(ⅲ)  再删去3后面的被3整除的数,剩下的3后面的第一个数是5,5是素数;(ⅳ)  再删去5后面的被5整除的数,剩下的5后面的第一个数是7,7是素数;  L L照以上步骤可以依次得到素数2, 3, 5, 7, 11, L。由定理2推论可知,不超过100的合数必有一个不超过10的素约数,因此在删去7后面被7整除的数以后,就得到了不超过100的全部素数。*///Eratosthenes筛法求1-100之间的素数#include <cstdlib>#include <iostream>#include <cmath>using namespace std;bool judge(int n)//判断该n是否为素数{    bool j=1;    for (int i=2;i<sqrt(n);i++)    {        if (n%i==0)        {            j=0;        }    }    return j;}void del(int n,int *a)//删去n后面的被2整除的数{    for (int i=n;i<100;i++)    {        if(a[i]%n==0)            a[i]=-1;    }}int main(int argc, char *argv[]){    int a[100];    for(int i=0;i<100;i++)        a[i]=i+1;    a[0]=-1;    for (i=2;i<sqrt(100);i++)//任何大于1的合数a必有一个不超过 的素约数    {        if(judge(a[i]))        {            del(i,a);//如果为素数,将该数设置为-1        }    }        for(i=0;i<100;i++)//输出    {        if(a[i]>0)        cout<<a[i]<<" ";    }    system("PAUSE");    return EXIT_SUCCESS;}

阅读(6334) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册