C语言给定一个正整数 n , ( 20 ≤ n ≤ 100 ) n,(20≤n≤100),求出小于等于 n n的所有素数。 输入 第1行是一个整数T,表示随后有T组数据。每组数据占1行,每行有1个整数。 输出
时间: 2024-10-18 10:15:03 浏览: 22
在C语言中,我们可以使用埃拉托斯特尼筛法(Sieve of Eratosthenes)来找出所有小于等于给定正整数n的素数。以下是简单的步骤:
1. 创建一个布尔数组isPrime,大小为n+1,初始值全部设为true。isPrime[i]表示i是否为素数。
2. 遍历从2到sqrt(n)的每个数,因为大于sqrt(n)的合数肯定会有小于它的因数已经筛选过了。
- 如果isPrime[j]为真,说明j是素数,将isPrime[j*j...n]设置为false,因为它们都是j的倍数,不是素数。
3. 输出所有isPrime[i]为真的数,即它们就是小于等于n的素数。
下面是伪代码形式的示例:
```c
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
void sieveOfEratosthenes(int n) {
bool isPrime[n+1];
for (int i = 2; i <= n; i++) {
isPrime[i] = true;
}
for (int j = 2; j * j <= n; j++) {
if (isPrime[j]) {
for (int k = j * j; k <= n; k += j) {
isPrime[k] = false;
}
}
}
for (int i = 2; i <= n; i++) {
if (isPrime[i]) {
printf("%d ", i);
}
}
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
int num;
scanf("%d", &num);
sieveOfEratosthenes(num);
printf("\n");
}
return 0;
}
```
阅读全文