打印前N个素数

来源:互联网 发布:手机超星怎么看网络课 编辑:程序博客网 时间:2024/05/21 08:50
题目:打印前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,校招,笔试

原创粉丝点击