c语言代码用筛选法求100以内的素数
时间: 2023-09-10 16:07:18 浏览: 49
以下是用筛选法求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的下标,即素数。
相关问题
c语言,用筛选法求100以内的素数
下面是使用筛选法求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`未筛选,则将其标记为素数,并将其所有倍数标记为非素数。最后遍历数组,输出素数。
生成c语言代码:用筛选法求100以内的素数
好的,以下是用筛选法求100以内的素数的C语言代码:
```c
#include <stdio.h>
int main() {
int n = 100;
int prime[n + 1];
for(int i = 2; i <= n; i++) {
prime[i] = 1;
}
for(int i = 2; i * i <= n; i++) {
if(prime[i] == 1) {
for(int j = i * i; j <= n; j += i) {
prime[j] = 0;
}
}
}
printf("100以内的素数有:\n");
for(int i = 2; i <= n; i++) {
if(prime[i] == 1) {
printf("%d ", i);
}
}
return 0;
}
```
使用筛选法求素数的原理是:先把所有数标记为素数,然后从2开始,将所有2的倍数标记为合数,然后再从3开始,将所有3的倍数标记为合数,以此类推,直到标记完所有小于等于n的素数。最后再遍历一遍数组,输出所有标记为素数的数。