请统计出n以内所有的素数个数。
请给出最大整数以内的一个数字n。
输出n以内素数的个数。
在这里给出一组输入。例如:
1000
在这里给出相应的输出。例如:
168
?
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// 统计n以内的素数个数
int count_primes(int n) {
if (n <= 1) return 0;
// 创建一个布尔数组,用于标记每个数字是否为素数
bool *is_prime = (bool*)malloc((n + 1) * sizeof(bool));
for (int i = 2; i <= n; ++i) {
is_prime[i] = true; // 初始化所有数字为素数
}
// 使用埃拉托斯特尼筛选法,将合数标记为非素数
for (int i = 2; i * i <= n; ++i) {
if (is_prime[i]) {
for (int j = i * i; j <= n; j += i) {
is_prime[j] = false;
}
}
}
// 统计素数个数
int count = 0;
for (int i = 2; i <= n; ++i) {
if (is_prime[i]) {
count++;
}
}
// 释放动态分配的内存
free(is_prime);
return count;
}
int main() {
int n;
scanf("%d", &n);
int result = count_primes(n);
printf("%d\n",result);
return 0;
}
?