用C语言编写以下程序输入一个数 N ,请你求 1 到 N 的质数的个数。 输入输出格式 输入格式 输入一个正整数 N。 输出格式 输出一个正整数,代表结果。 输入输出样例1 输入 4 输出 2 输入输出样例2 输入 10 输出 4 说明提示 1≤N≤10 5
时间: 2024-11-04 18:13:48 浏览: 11
在C语言中,我们可以通过使用埃拉托斯特尼筛法(Sieve of Eratosthenes)来找出从1到N之间的所有质数。这是一种简单而有效的算法,通过不断排除合数,直到找到所有的素数。以下是使用这种方法的C语言代码示例:
```c
#include <stdio.h>
#include <stdbool.h> // 引入布尔类型
// 函数声明
bool is_prime(int num);
int count_primes(int n) {
bool primes[n+1]; // 创建一个布尔型数组,primes[i]表示i是否为质数
int count = 0;
// 初始化所有数为质数(除了1)
for (int i = 2; i <= n; i++) {
if (is_prime(i)) {
primes[i] = true; // 标记为质数
count++;
} else {
primes[i] = false; // 标记为非质数
}
}
return count;
}
// 判断一个数是否为质数
bool is_prime(int num) {
if (num <= 1) {
return false;
}
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
return false;
}
}
return num > 1; // 大于1且不是合数的就是质数
}
int main() {
int N;
printf("请输入一个正整数 N:");
scanf("%d", &N);
int prime_count = count_primes(N);
printf("从1到%d的质数个数为:%d\n", N, prime_count);
return 0;
}
阅读全文