给定一个正整数n,输出[1,n]范围内的所有素数。 输入描述 一个正整数n(2≤n≤106)。 输出描述 每行一个素数,从小到大输出[1,n]范围内的所有素数。C语言回答
时间: 2024-03-26 18:35:42 浏览: 176
输入整数n,输出1~n的素数
可以使用筛法求解[1,n]范围内的所有素数。具体步骤如下:
1. 定义一个长度为n+1的布尔型数组isPrime,初始时所有元素都为true;
2. 从2开始,遍历[2,n]范围内的所有整数i,如果isPrime[i]为true,那么输出i,并将isPrime[i]为false,然后将i的所有倍数isPrime[j](j=i+1,i+2,...,n)都设为false。
以下是C语言的代码实现:
```c
#include <stdio.h>
#include <stdbool.h>
int main() {
int n;
scanf("%d", &n);
bool isPrime[n + 1];
for (int i = 2; i <= n; i++) {
isPrime[i] = true;
}
for (int i = 2; i <= n; i++) {
if (isPrime[i]) {
printf("%d\n", i);
for (int j = i + i; j <= n; j += i) {
isPrime[j] = false;
}
}
}
return 0;
}
```
在主函数中,首先读入正整数n,然后定义一个长度为n+1的布尔型数组isPrime,并将所有元素都初始化为true。然后从2开始遍历[2,n]范围内的所有整数i,如果isPrime[i]为true,那么输出i,并将i的所有倍数isPrime[j](j=i+1,i+2,...,n)都设为false。最后输出所有素数即可。
阅读全文