码迷,mamicode.com
首页 > 其他好文 > 详细

求质数数量 - 空间换时间

时间:2014-07-24 23:21:20      阅读:361      评论:0      收藏:0      [点我收藏+]

标签:质数   空间换时间   优化   

质数:被自己本身和1整出的数

int getPrimeCount(int value){
 int count = 0;
 int arr[301] = {0};// 0 - is prime , 1 - is not prime

 int num = (int)sqrt((float)value);
 for(int i = 2; i <= num ; ++i){
  if (!arr[i]){
   for(int j = i; i * j < value; ++j){
    arr[i * j] = 1;
   }
  }
 }

 for (int i = 2; i < value; ++i){
  if(arr[i] == 0){
   ++count;
  }
 }
 printf("count = %d\n", count);
 return count;
}

int test(int n){
 int  count = getPrimeCount(300);
 return 0;
}

PS:1.质数满足一个公式就是 n 不能整除n平方根以下的数字。例如 300 的平方根是17;如果300的质数那么他就不能整出17以下的数字(17,16,15.....)整除,能整除就是非质数。

        2.不是合数的数就是质数。比如:2是质数(4,6,8....)2的倍数是合数,3是质数(6,9,12... )3的倍数也是合数。以此类推,17以下所有数的倍数都是合数。

上面的函数求的是300以内所有输的质数数量。数组容量301 是为了对应 质数。(数组是0开始,最大索引也就是300);

初始化为0表示所有数都是质数。1 表示是合数。

 

求质数数量 - 空间换时间,布布扣,bubuko.com

求质数数量 - 空间换时间

标签:质数   空间换时间   优化   

原文地址:http://blog.csdn.net/helloarm123456/article/details/38089611

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!