zoukankan      html  css  js  c++  java
  • 埃拉托色尼筛法(Sieve of Eratosthenes)求素数。

      埃拉托色尼筛法(Sieve of Eratosthenes)是一种用来求所有小于N的素数的方法。
    从建立一个整数2~N的表着手,寻找i? 的整数,编程实现此算法,并讨论运算时间。

    由于是通过删除来实现,而1和0则不是素数,所以从2,3,5以及其倍数删除。

    用Data[]来储存所有的数,将替换好的数字存在Data[]当中

    而只需做出将2,3,5以及能将这些数整除的数字替换为零:if(Data[j] % i == 0 ) Data[j]==0;

    实现的代码段为:

    for (i = 2; i < n; i++)
    		for (j = i + 1; j < n; j++)
    			if (Data[j] != 0 && Data[j] % i == 0)
    				Data[j] = 0;
    

    所以最终完整的实现过程是:

    #include <iostream>
    #include <math.h>
    using namespace std;
    #define Max 50000
    int n;
    int Data[Max];
    class Rox
    {
    public:
    	void Show();
    	void Creat();
    	void Run();
    private:
    	int i, j;
    };
    void Rox::Creat()
    {
    	for (i = 0; i <= n; i++)
    		Data[i] = i;
    }
    void Rox::Run()
    {
    	for (i = 2; i < n; i++){
    		for (j = i + 1; j < n; j++){
    			if (Data[j] != 0 && Data[j] % i == 0)
    				Data[j] = 0;
    		}
    	}
    }
    void  Rox::Show()
    {
    	for (i = 0; i <=n; i++)
    	{
    		if (Data[i] != 0&&Data[i]!=1)
    			cout <<" " <<Data[i];
    	}
    }
    void main()
    {
    	Rox T;
    	cout << "请输入所测试的最大值 N:";
    	cin >> n;
    	T.Creat();
    	cout << "所创建的表为" << endl;
    	T.Show();
    	T.Run();
    	cout<<endl;
    	cout << "经过删除得到的表为:" << endl;
    	T.Show();
    	cout << endl;
    }
    

      

       

  • 相关阅读:
    Linux系统中/和是什么意思,和window系统有什么区别?
    给自己的U盘设定图标
    我的第一篇文章
    大端小端
    好玩的地图
    英语流利说 第28天
    英语流利说 第27天
    英语流利说 第26天
    英语流利说 第25天
    英语流利说 第24天
  • 原文地址:https://www.cnblogs.com/Stringair/p/6241569.html
Copyright © 2011-2022 走看看