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;
    }
    

      

       

  • 相关阅读:
    阿里笔试题—战报交流
    2 基于梯度的攻击——PGD
    1 基于梯度的攻击——FGSM
    0 对抗样本
    自然语言处理 复习笔记 3
    自然语言处理 复习笔记 2
    自然语言处理 复习笔记 1
    GRU
    1*1卷积核的作用
    BP原理
  • 原文地址:https://www.cnblogs.com/Stringair/p/6241569.html
Copyright © 2011-2022 走看看