编写一个程序来计算并输出小于等于给定整数 a(0 <= a <= 1,000,000)内的素数数量,该程序应能有效处理大范围输入。c语言
时间: 2024-12-18 15:15:53 浏览: 23
编写一个高效的C语言程序来计算并输出小于等于给定整数a的所有素数,你可以使用埃拉托斯特尼筛法(Sieve of Eratosthenes)。这种方法通过维护一个数组,标记非素数位置,然后逐渐筛选出素数。以下是基本的步骤:
```c
#include <stdio.h>
#include <stdbool.h>
void sieve_of_eratosthenes(int n) {
bool is_prime[n+1]; // 初始化所有数字为质数
for (int i = 2; i <= n; i++) {
is_prime[i] = true;
}
for (int p = 2; p*p <= n; p++) { // 只需要检查到根号n,因为之后的合数都会被前面的质数因子覆盖
if (is_prime[p]) {
// 将p的倍数标记为非质数
for (int i = p * p; i <= n; i += p)
is_prime[i] = false;
}
}
int prime_count = 0;
for (int i = 2; i <= n; i++) {
if (is_prime[i])
prime_count++;
}
printf("There are %d primes less than or equal to %d.\n", prime_count, n);
}
int main() {
int a;
printf("Enter an integer (0 <= a <= 1,000,000): ");
scanf("%d", &a);
// 检查输入是否在范围内
if (a < 0 || a > 1000000) {
printf("Invalid input! Please enter a number between 0 and 1,000,000.\n");
return 1;
}
sieve_of_eratosthenes(a); // 计算并输出素数
return 0;
}
```
当你运行这个程序,它会提示用户输入一个整数,并计算并打印出小于或等于那个整数的所有素数。
阅读全文