c语言,用筛选法求100以内的素数
时间: 2023-11-22 14:58:30 浏览: 198
下面是使用筛选法求100以内素数的C语言代码:
```c
#include <stdio.h>
int main() {
int is_prime[101] = {0}; //初始化数组,0表示未筛选,1表示非素数,2表示素数
for (int i = 2; i <= 100; i++) {
if (is_prime[i] == 0) { //如果i未筛选
is_prime[i] = 2; //标记i为素数
for (int j = 2; i * j <= 100; j++) {
is_prime[i * j] = 1; //标记i的倍数为非素数
}
}
}
for (int i = 2; i <= 100; i++) {
if (is_prime[i] == 2) { //输出素数
printf("%d ", i);
}
}
return 0;
}
```
首先初始化一个长度为101的数组`is_prime`,其中0表示未筛选,1表示非素数,2表示素数。从2开始遍历到100,如果当前数`i`未筛选,则将其标记为素数,并将其所有倍数标记为非素数。最后遍历数组,输出素数。
相关问题
用筛选法求100以内素数,用c语言代码实现
好的,以下是用筛选法求100以内素数的C语言代码实现:
```c
#include <stdio.h>
int main() {
// 初始化标记数组,0 表示未标记,1 表示已标记
int is_prime[101] = {0};
// 循环遍历2~100之间的整数
for (int i = 2; i <= 100; i++) {
// 如果当前数已被标记,则跳过
if (is_prime[i]) continue;
// 打印当前素数
printf("%d ", i);
// 将当前素数的倍数标记为非素数
for (int j = i * 2; j <= 100; j += i) {
is_prime[j] = 1;
}
}
return 0;
}
```
这段代码中,我们使用了一个标记数组 `is_prime` 来标记每个整数是否为素数。初始时,所有数都被标记为未标记状态。然后,我们从2开始遍历到100,对于每个素数,我们打印它,并将它的倍数标记为非素数。具体来说,我们从2开始,将2的所有倍数(4、6、8、10、...)标记为非素数;然后,我们遍历到3时,发现3未被标记,因此将3的所有倍数(6、9、12、...)标记为非素数;接着,我们遍历到5时,发现5未被标记,因此将5的所有倍数(10、15、20、...)标记为非素数;以此类推,直到遍历完2~100之间的所有整数。
c语言筛选法输出100以内的素数
下面是一种使用筛选法计算 100 以内素数的 C 语言程序:
```c
#include <stdio.h>
#include <stdbool.h>
int main() {
const int max = 100;
bool isPrime[max+1];
for (int i = 2; i <= max; i++) {
isPrime[i] = true;
}
for (int i = 2; i * i <= max; i++) {
if (isPrime[i]) {
for (int j = i * i; j <= max; j += i) {
isPrime[j] = false;
}
}
}
for (int i = 2; i <= max; i++) {
if (isPrime[i]) {
printf("%d ", i);
}
}
return 0;
}
```
程序中的 `isPrime` 数组用于记录某个数字是否为素数,初始化为 `true`。然后从 2 开始,如果它是素数,就把它的倍数都标记为非素数,最后输出所有标记为素数的数字。
这个算法的时间复杂度为 O(nloglogn),比试除法更优秀。
阅读全文