计数质数
实例要求
- 给定整数 n ,返回 所有小于非负整数 n 的质数的数量;
- 示例:
实例分析
- 1、要计算小于非负整数 n 的质数的数量,可以使用埃拉托斯特尼筛法;
- 2、这个算法通过标记素数的倍数来找出所有的素数;
- 3、首先创建一个布尔类型的数组 isPrime,将其初始化为 true,表示所有数字都是质数;
- 4、然后从 2 开始,遍历数组,将每个质数的倍数标记为非质数;
- 5、最后,我们统计剩余的质数数量并返回;
示例代码
int countPrimes(int n){
if (n <= 2) return 0; // 0和1都不是质数
int count = 0;
bool *isPrime = (bool*)malloc(sizeof(bool) * n);
// 初始化标记数组,假设所有数都是质数
for (int i = 2; i < n; i++) {
isPrime[i] = true;
}
// 标记非质数的倍数
for (int i = 2; i * i < n; i++) {
if (isPrime[i]) {
for (int j = i * i; j < n; j += i) {
isPrime[j] = false;
}
}
}
// 统计质数的数量
for (int i = 2; i < n; i++) {
if (isPrime[i]) {
count++;
}
}
free(isPrime);
return count;
}
运行结果