请给出素数筛的C语言代码并加以详细注释
时间: 2023-05-21 12:02:45 浏览: 105
素数判断的C代码
以下是素数筛的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_N 1000000
bool is_prime[MAX_N + 1];
void sieve(int n) {
for (int i = 2; i <= n; i++) {
is_prime[i] = true;
}
for (int i = 2; i * i <= n; i++) {
if (is_prime[i]) {
for (int j = i * i; j <= n; j += i) {
is_prime[j] = false;
}
}
}
}
int main() {
int n;
printf("请输入一个正整数n:");
scanf("%d", &n);
sieve(n);
printf("小于等于%d的素数有:", n);
for (int i = 2; i <= n; i++) {
if (is_prime[i]) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}
```
注释如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_N 1000000 // 定义最大范围
bool is_prime[MAX_N + 1]; // 定义一个数组,用于标记是否为素数
void sieve(int n) { // 素数筛函数
for (int i = 2; i <= n; i++) { // 初始化,将所有数标记为素数
is_prime[i] = true;
}
for (int i = 2; i * i <= n; i++) { // 从2开始,枚举小于等于sqrt(n)的素数i
if (is_prime[i]) { // 如果i是素数
for (int j = i * i; j <= n; j += i) { // 将i的倍数标记为非素数
is_prime[j] = false;
}
}
}
}
int main() {
int n;
printf("请输入一个正整数n:");
scanf("%d", &n);
sieve(n); // 调用素数筛函数
printf("小于等于%d的素数有:", n);
for (int i = 2; i <= n; i++) { // 输出所有小于等于n的素数
if (is_prime[i]) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}
```
希望能够帮到你!
阅读全文