首页 > 代码库 > 求质数数量 - 空间换时间

求质数数量 - 空间换时间

质数:被自己本身和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 表示是合数。