首页 > 代码库 > 求质数数量 - 空间换时间
求质数数量 - 空间换时间
质数:被自己本身和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 表示是合数。