计数质数
实例要求
- 给定整数 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;
}
运行结果