现在的位置: 首页 > 综合 > 正文

打印前N个素数

2018年04月05日 ⁄ 综合 ⁄ 共 630字 ⁄ 字号 评论关闭
题目:打印前N个素数,不需要考虑大数和溢出
思路:从2开始,依次检测后续的每个数,若为素数,计数加1,直到计数到N。
分析:问题复杂度的瓶颈在于判断一个数是否为素数。鉴于前面的素数已经找出,可以将所有找出的素数保存下来,在判断一个数x是否为素数时,只需判断该数x是否能整除[2,sqrt(x)]内的所有素数即可。
/*  
* 打印前N个素数  
* 不需要考虑大数和溢出的情况  
*  
*/  

#include <vector>  
#include <stdio.h>  
#include <math.h>  

void print_prime(int N)  
{  
	if (N < 1) return;  
	std::vector<int> primes;  
	int num = 2;  
	int count = 1;  
	primes.push_back(num);  
	printf("%d ", num);  

	while (count < N) 
	{   
		bool isPrime = true;   
		++ num;   
		int sqr = (int)std::sqrt((float)num);   
		for (std::vector<int>::iterator iter = primes.begin();   
			iter != primes.end() && *iter <= sqr;   
			++ iter) 
		{  
			if (num % *iter == 0)
			{   
				isPrime = false;   
				break;   
			}   
		}  
		if (isPrime) 
		{   
			++ count;   
			primes.push_back(num);   
			printf("%d ", num);   
		}   
	}  
} 

PS: Google,2013,校招,笔试

抱歉!评论已关闭.