Sieve of Eratosthenes(埃拉托色尼篩選法)——C++實現

採用vs2010編譯。

//findPrimeNumber.h
#pragma once

#include <iostream>
#include <vector>

using namespace std;

// use the Sieve of Eratosthenes method to find the prime numbers in range from 1 to n
vector<unsigned int> findPrimeNumber(unsigned int n)
{
	vector<bool> boolVector(n,true);
	vector<unsigned int> resultVector;// save the prime numbers.
	for(unsigned int i = 2; i*i <n; ++i)
		if(boolVector[i] == true){
			for(unsigned int j = i; i*j < n; ++j){
				boolVector[i*j] = false;
			}
		}
		for(unsigned int i = 2; i< n; ++i){
			if(boolVector[i])
				resultVector.push_back(i);
		}
		if(resultVector.size()==0){
			cout << "There is " << resultVector.size() << " prime numbers.\n";
		}
		else{
			cout << "There is " << resultVector.size() << " prime numbers.They are:\n"; 
			for(unsigned int i = 0; i < resultVector.size(); ++i)
				cout << resultVector[i] << endl;
		}
		return resultVector;
}

findPromeNumber 函數使用事例如下:

// sieveofEratosthenesExample.cpp : 定義控制檯應用程序的入口點。
//

#include "stdafx.h"
#include "findPrimeNumber.h"

int _tmain(int argc, _TCHAR* argv[])
{
	cout << "This is a example to display that\n"
		<< "how to use the findPrimeNumber function to find prime numbers.\n";
	cout << "----------------------------------------------------------------\n";
	unsigned int upperLimitValue = 0;
	cout << "Please input the upper limit value: ";
	cin >> upperLimitValue;
	findPrimeNumber(upperLimitValue);
	return 0;
}

其中 stdafx.h爲建立控制檯應用程序時,系統自動生成。
計算結果如下所示:
採用Sieve of Eratosthenes(埃拉托色尼篩選法)搜索一定範圍內的素數值,輸入最大值爲50,計算結果如圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章