用python编写一个判断素数的函数,并打印100以内所有素数。我需要多种方法
时间: 2024-02-05 16:11:43 浏览: 90
方法一:暴力枚举法
暴力枚举法是最朴素的判断素数的方法,即遍历从2到目标数-1的所有自然数,判断目标数是否能被整除。如果能被整除,则目标数不是素数;反之,则是素数。
下面是代码实现:
```python
def is_prime(num):
if num <= 1:
return False
for i in range(2, num):
if num % i == 0:
return False
return True
for i in range(2, 101):
if is_prime(i):
print(i)
```
方法二:优化暴力枚举法
在暴力枚举法中,我们可以发现,如果一个数可以被分解成两个数的乘积,那么其中一个数肯定小于等于它的平方根。因此,在判断素数时,我们只需要遍历从2到目标数平方根的所有自然数。
下面是代码实现:
```python
import math
def is_prime(num):
if num <= 1:
return False
for i in range(2, int(math.sqrt(num)) + 1):
if num % i == 0:
return False
return True
for i in range(2, 101):
if is_prime(i):
print(i)
```
方法三:埃拉托斯特尼筛法
埃拉托斯特尼筛法是一种较为高效的素数筛法,其基本思想是从小到大枚举每个素数,然后将其倍数全部标记为合数。这样在后面的判断中就可以直接跳过这些合数。
下面是代码实现:
```python
def eratosthenes(n):
primes = []
is_prime = [True] * (n + 1)
for i in range(2, n + 1):
if is_prime[i]:
primes.append(i)
j = i * i
while j <= n:
is_prime[j] = False
j += i
return primes
primes = eratosthenes(100)
for prime in primes:
print(prime)
```
方法四:欧拉筛法
欧拉筛法是一种更为高效的素数筛法,其基本思想是在埃拉托斯特尼筛法的基础上,将每个合数标记为它的最小质因子,这样可以避免重复标记。具体实现可参考下面的代码:
```python
def euler(n):
primes = []
is_prime = [True] * (n + 1)
for i in range(2, n + 1):
if is_prime[i]:
primes.append(i)
for j in range(len(primes)):
if i * primes[j] > n:
break
is_prime[i * primes[j]] = False
if i % primes[j] == 0:
break
return primes
primes = euler(100)
for prime in primes:
print(prime)
```
以上四种方法都可以用来判断素数,并打印100以内所有素数。其中暴力枚举法是最简单的,但时间复杂度较高;而欧拉筛法则是最高效的,但实现较为复杂。根据实际需要选择不同的方法即可。
阅读全文