正文

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  10
11  12  13  14  15  16  17  18  19  20
21  22  23  24  25  26  27  28  29  30
31  32  33  34  35  36  37  38  39  40
41  42  43  44  45  46  47  48  49  50
51  52  53  54  55  56  57  58  59  60
61  62  63  64  65  66  67  68  69  70
71  72  73  74  75  76  77  78  79  80
81  82  83  84  85  86  87  88  89  90
91  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;
}

阅读(6091) | 评论(1)


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

评论

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