用Python将厄拉多塞筛法表达
时间: 2023-11-05 14:41:31 浏览: 123
素数列表
很好的问题!下面是使用 Python 实现厄拉多塞筛法的代码:
def sieve(n):
prime = [True for i in range(n+1)]
p = 2
while p*p <= n:
if prime[p] == True:
for i in range(p*p, n+1, p):
prime[i] = False
p += 1
return [p for p in range(2, n) if prime[p] == True]
n = 50
print("Prime numbers smaller than or equal to", n, "are:")
print(sieve(n))
这里使用了一个布尔型数组 prime[] 来记录每个数是否为素数,一开始默认所有数都是素数,然后从 2 开始遍历,对于每个素数 p,将它的倍数都标记为非素数。最后只需要遍历一遍,将所有标记为素数的数输出即可。
相关问题
厄拉多塞筛法求素数c语言代码
厄拉多塞筛法(Sieve of Eratosthenes)是一种古老的算法,用于找出一定范围内所有的素数。以下是简单的C语言代码实现:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_PRIME 10000 // 可以根据需要调整
// 初始数组全部标记为素数
bool is_prime[MAX_PRIME + 1] = {true};
void sieve_of_eratosthenes() {
int i, j;
for (i = 2; i * i <= MAX_PRIME; i++) {
if (is_prime[i]) {
for (j = i * i; j <= MAX_PRIME; j += i) {
is_prime[j] = false; // 如果当前数字能被i整除,则不是素数
}
}
}
// 输出所有找到的素数
printf("素数列表: ");
for (i = 2; i <= MAX_PRIME; i++) {
if (is_prime[i])
printf("%d ", i);
}
}
int main() {
sieve_of_eratosthenes();
return 0;
}
```
在这个代码中,我们首先创建一个布尔数组表示从2到`MAX_PRIME`的所有数字是否是素数。然后从2开始,如果它是素数(`is_prime[i]`为真),就将它的倍数标记为非素数。最后,打印出所有剩下的素数。
Python素数判断
Python素数判断可以使用以下两种方法:
1. 质数判断法:
一个数如果只能被1和它本身整除,那么这个数就是质数。通过遍历2到该数-1的所有数,判断是否能被整除,来判断该数是否为质数。
代码示例:
```python
def is_prime(num):
if num < 2:
return False
for i in range(2, num):
if num % i == 0:
return False
return True
```
2. 厄拉多塞筛法:
该算法是在一定范围内筛选出所有的质数,而不是单独判断一个数是否为质数。首先将2到n的正整数放入表中,然后在2的上面画一个圆圈,然后把表中所有2的倍数都划掉;第一个既没有画圈又没有被划去的数是3,将它画圈,再把表中所有3的倍数都划去;接下来是5、7、11等质数,不断重复这个过程,直到筛完为止。
代码示例:
```python
def sieve_of_eratosthenes(num):
primes = [True] * (num+1)
primes, primes = False, False
for i in range(2, int(num ** 0.5) + 1):
if primes[i]:
for j in range(i*i, num+1, i):
primes[j] = False
return [i for i in range(num+1) if primes[i]]
```
阅读全文