生成一个素数筛的c语言代码
时间: 2023-09-06 17:04:55 浏览: 126
### 回答1:
以下是一个生成素数筛的C语言代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
void sieve_of_eratosthenes(int n) {
bool *prime = (bool *) malloc((n+1) * sizeof(bool));
for (int i = 0; i <= n; i++) {
prime[i] = true;
}
for (int p = 2; p*p <= n; p++) {
if (prime[p] == true) {
for (int i = p*p; i <= n; i += p) {
prime[i] = false;
}
}
}
printf("2 ");
for (int p = 3; p <= n; p += 2) {
if (prime[p] == true) {
printf("%d ", p);
}
}
}
int main() {
int n = 100; // 生成小于等于100的素数
printf("小于等于%d的素数有:\n", n);
sieve_of_eratosthenes(n);
return 0;
}
```
该代码使用了埃拉托色尼筛选法(sieve of Eratosthenes),该算法首先将所有数标记为素数,然后从2开始枚举,将所有的倍数标记为合数。最后输出所有标记为素数的数即为所求。
### 回答2:
以下是一段使用C语言编写的生成素数筛的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
void sieveOfEratosthenes(int n) {
bool isPrime[n+1];
// 默认所有数都是素数
for (int i = 2; i <= n; i++) {
isPrime[i] = true;
}
// 标记非素数
for (int p = 2; p * p <= n; p++) {
if (isPrime[p]) {
for (int i = p * p; i <= n; i += p) {
isPrime[i] = false;
}
}
}
// 输出素数
for (int p = 2; p <= n; p++) {
if (isPrime[p]) {
printf("%d ", p);
}
}
}
int main() {
int n;
printf("请输入一个正整数:");
scanf("%d", &n);
printf("从2到%d之间的素数为:\n", n);
sieveOfEratosthenes(n);
return 0;
}
```
这段代码首先使用bool数组`isPrime`来记录每个数字是否是素数。我们使用标记法来筛选出素数,将2到n之间的所有数都初始化为素数。然后从2开始,遍历到`p * p <= n`的所有数字,如果这个数字是素数,那么将其所有的倍数标记为非素数,最后输出素数。在主函数中,首先接收用户输入的正整数n,然后调用`sieveOfEratosthenes`函数来输出从2到n之间的素数。
### 回答3:
以下是一个生成素数筛的C语言代码:
#include <stdio.h>
#include <stdbool.h>
void primeSieve(int n) {
bool isPrime[n+1];
for (int i = 0; i <= n; i++) {
isPrime[i] = true;
}
for (int p = 2; p * p <= n; p++) {
if (isPrime[p] == true) {
for (int i = p * p; i <= n; i += p) {
isPrime[i] = false;
}
}
}
printf("素数筛结果:\n");
for (int p = 2; p <= n; p++) {
if (isPrime[p]) {
printf("%d ", p);
}
}
}
int main() {
int n;
printf("请输入一个正整数:");
scanf("%d", &n);
primeSieve(n);
return 0;
}
在这个代码中,我们首先定义了一个名为 primeSieve 的函数,它接受一个整数 n 作为输入。我们使用一个布尔数组 isPrime 来表示每个数是否为素数。初始时,我们将所有的数都标记为素数(值为 true)。
接下来,我们从 2 开始遍历到 n 的平方根,并检查每个数是否为素数。如果一个数 p 是素数,那么它的倍数一定不是素数,所以我们将 p 的所有倍数标记为非素数(值为 false)。
最后,我们遍历 isPrime 数组,并输出其中值为 true 的数,即为素数。
在主函数中,我们首先读取用户输入的正整数 n,然后调用 primeSieve 函数来生成素数筛结果。
希望对你有所帮助!
阅读全文