c语言代码用筛选法求100以内的素数
时间: 2023-09-10 20:07:18 浏览: 104
以下是用筛选法求100以内素数的C语言代码:
```c
#include <stdio.h>
int main() {
int n = 100;
int prime[n+1];
int i, j;
// 初始化数组
for(i = 2; i <= n; i++) {
prime[i] = 1;
}
// 筛选法
for(i = 2; i*i <= n; i++) {
if(prime[i]) {
for(j = i*i; j <= n; j += i) {
prime[j] = 0;
}
}
}
// 输出素数
for(i = 2; i <= n; i++) {
if(prime[i]) {
printf("%d ", i);
}
}
return 0;
}
```
代码解析:
1. 首先定义一个长度为n+1的数组prime,用来记录1~n之间的数字是否是素数,1表示是素数,0表示不是素数。
2. 初始化数组,从2开始所有数字都标记为素数。
3. 从2开始,一直到i*i>n,进行筛选。如果prime[i]为1,说明i是素数,然后把i的倍数(除去i本身)标记为非素数。
4. 输出素数,遍历prime数组,输出所有值为1的下标,即素数。
相关问题
用筛选法求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之内的素数
好的,以下是用C语言实现的筛选法求100以内的素数的代码:
```c
#include <stdio.h>
#include <stdbool.h>
int main() {
bool isPrime[101]; // 用于存储1~100中每个数是否为素数
int i, j;
// 初始化,将所有数都视为素数
for (i = 2; i <= 100; i++) {
isPrime[i] = true;
}
// 筛选法求素数
for (i = 2; i <= 100; i++) {
if (isPrime[i]) { // 如果i是素数
for (j = i * 2; j <= 100; j += i) { // 将i的倍数全部标记为合数
isPrime[j] = false;
}
}
}
// 输出素数
for (i = 2; i <= 100; i++) {
if (isPrime[i]) {
printf("%d ", i);
}
}
return 0;
}
```
输出结果为:
```
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
```
希望我的代码能够帮助到您!
阅读全文