筛法求小于等于n的质数
时间: 2023-09-24 13:11:22 浏览: 140
筛法是一种常用的求解质数的方法,可以用来求小于等于n的所有质数。具体实现过程如下:
```c
#include <stdio.h>
#include <stdlib.h>
void sieve(int n) {
int *is_prime = (int *) malloc(sizeof(int) * (n + 1));
for (int i = 2; i <= n; i++) {
is_prime[i] = 1; // 初始化都为质数
}
for (int i = 2; i * i <= n; i++) {
if (is_prime[i]) { // 如果i是质数,就将i的倍数都标记为非质数
for (int j = i * i; j <= n; j += i) {
is_prime[j] = 0;
}
}
}
printf("小于等于%d的质数有:\n", n);
for (int i = 2; i <= n; i++) {
if (is_prime[i]) {
printf("%d ", i);
}
}
printf("\n");
free(is_prime);
}
int main() {
int n;
printf("请输入一个整数:");
scanf("%d", &n);
sieve(n);
return 0;
}
```
该方法首先定义一个长度为n + 1的数组is_prime,用于记录小于等于n的所有数是否为质数。然后初始化数组中所有元素都为质数,从2开始循环遍历到n的平方根,如果当前数是质数,就将它的倍数都标记为非质数。最后遍历整个数组,输出所有值为质数的数。
阅读全文
相关推荐















