博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

求素数

Posted on 2011-06-01 17:03  单鱼游弋  阅读(213)  评论(0编辑  收藏  举报

下面代码仅供本人复习所用,实用性N低,各位飘过吧~~哈哈:>

//
// 求素数. 
//

#include <cstdlib>
#include <cmath>
#include <iostream>
#include <vector>
#include <iomanip>

typedef std::vector<unsigned long> Primer;

//
// 将 range 范围内的素数保存到向量 primer 中.
// 当一个数除以 2 直到到它的平方根时都没有整除,则该数为素数. 
//
void getPrimer(Primer &primer, const unsigned long range)
{
	bool isPrimer = false;
	double square_root;
	
	for (unsigned long i = 2, j; i <= range; ++i) 
	{
		isPrimer = true;
		square_root = sqrt(i);
		for (j = 2; j <= square_root; ++j) 
		{ 
			if (0 == i % j) {
				isPrimer = false;
				break;
			}
		}
		if (true == isPrimer) {
			primer.push_back(i);
		}
	}
} 

//
// 测试. 
//
int main(void)
{
	unsigned long range;
	Primer primer;
	
	std::cout << "Please input primer solving range: ";
	while (!(std::cin >> range)) {
		std::cout << "Input wrong, input again: "; 
	}
	
	getPrimer(primer, range);
	
	Primer::iterator beg = primer.begin();
	Primer::iterator end = primer.end();
	while (beg != end) {
		std::cout << *beg++ << " "; 
	}
	std::cout << std::endl;
	
	return EXIT_SUCCESS;
}