写一个筛法判断素数的代码
时间: 2023-09-13 13:05:26 浏览: 100
### 回答1:
以下是一个简单的筛法判断素数的代码:
#include <stdio.h>
int main() {
int n, i, j, flag;
printf("请输入一个正整数:");
scanf("%d", &n);
if (n <= 1) {
printf("%d不是素数\n", n);
return ;
}
for (i = 2; i <= n; i++) {
flag = 1;
for (j = 2; j < i; j++) {
if (i % j == ) {
flag = ;
break;
}
}
if (flag == 1) {
printf("%d是素数\n", i);
}
}
return ;
}
### 回答2:
素数是指只能被1和自身整除的正整数,筛法也称为埃拉托斯特尼筛法,是一种用于判断素数的算法。以下是使用筛法判断素数的代码:
```python
def sieve_of_eratosthenes(n):
# 创建一个长度为n+1的列表,初始值都为True
is_prime = [True] * (n+1)
# 0和1不是素数,将对应的布尔值设置为False
is_prime[0] = is_prime[1] = False
# 开始筛选,从2开始遍历到n的平方根
for i in range(2, int(n**0.5)+1):
if is_prime[i]:
# 如果i是素数,则将i的所有倍数都标记为False
for j in range(i*i, n+1, i):
is_prime[j] = False
# 返回所有布尔值为True的索引,即为素数的列表
primes = [i for i in range(n+1) if is_prime[i]]
return primes
# 调用函数,并输出小于等于100的素数
primes = sieve_of_eratosthenes(100)
print(primes)
```
上述代码通过创建一个布尔类型的列表来记录每个数字是否是素数,初始假设都为素数。然后从2开始遍历到n的平方根,如果当前数字是素数,则将其所有倍数都标记为False。最后返回布尔值为True的索引,即为素数的列表。
在代码中调用`sieve_of_eratosthenes(100)`可以得到小于等于100的所有素数。输出结果为:[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]。
### 回答3:
素数是指大于1的自然数,除了1和它本身外,不能被其他自然数整除的数。筛法是一种用来筛选素数的算法。以下是一个用筛法判断素数的代码:
```
def sieve_of_eratosthenes(n):
# 初始化一个布尔数组,用来标记每个数字是否为素数
is_prime = [True] * (n + 1)
# 将0和1标记为非素数
is_prime[0] = is_prime[1] = False
# 从2开始遍历到sqrt(n),将其倍数标记为非素数
for i in range(2, int(n**0.5) + 1):
if is_prime[i]:
for j in range(i*i, n + 1, i):
is_prime[j] = False
# 返回素数的列表
primes = [i for i in range(n + 1) if is_prime[i]]
return primes
```
这段代码使用了一个布尔数组`is_prime`来标记每个数字是否为素数。首先将0和1标记为非素数。然后从2开始遍历到sqrt(n),如果遍历到的数字为素数,则将其倍数都标记为非素数。最后,将标记为素数的数字存入一个列表,并返回该列表。
可以通过调用`sieve_of_eratosthenes(n)`函数来获取小于等于n的所有素数。例如,调用`sieve_of_eratosthenes(30)`将返回一个包含素数[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]的列表。
阅读全文