用多种方法Python打印100以内的质数
时间: 2023-11-22 18:56:58 浏览: 68
以下是几种方法:
方法一:使用嵌套循环
```python
for num in range(2, 100):
for i in range(2, num):
if num % i == 0:
break
else:
print(num)
```
方法二:使用while循环
```python
num = 2
while num < 100:
for i in range(2, num):
if num % i == 0:
break
else:
print(num)
num += 1
```
方法三:使用列表推导式和all()函数
```python
primes = [num for num in range(2, 100) if all(num % i != 0 for i in range(2, num))]
print(primes)
```
方法四:使用filter()函数和lambda表达式
```python
primes = list(filter(lambda num: all(num % i != 0 for i in range(2, num)), range(2, 100)))
print(primes)
```
这些方法都可以打印出100以内的质数,但具体的实现方式有所不同。
相关问题
用python编写一个判断素数的函数,并打印100以内所有素数。我需要多种方法
方法一:暴力枚举法
暴力枚举法是最朴素的判断素数的方法,即遍历从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以内所有素数。其中暴力枚举法是最简单的,但时间复杂度较高;而欧拉筛法则是最高效的,但实现较为复杂。根据实际需要选择不同的方法即可。
Python多种方法实现打印m到n范围以内的素数。(要求:要有异常处理,一行只能输出8个)
好的,我可以为您提供多种Python实现方法,满足您的要求:
方法一:使用函数和异常处理
```python
def is_prime(num):
if num <= 1:
return False
for i in range(2, int(num**0.5)+1):
if num % i == 0:
return False
return True
try:
m, n = map(int, input("请输入范围m和n:").split())
count = 0
for num in range(m, n+1):
if is_prime(num):
print(num, end=' ')
count += 1
if count % 8 == 0:
print()
except ValueError:
print("输入格式错误,请输入正确的数字范围!")
```
这里我们同样定义了一个`is_prime`函数来判断一个数是否为素数,然后使用`try-except`语句来处理输入格式错误的异常。如果输入格式错误,我们输出提示信息。否则,我们遍历这个范围内的每一个数,如果是素数则输出。同时,我们使用`count`来计数,每输出8个素数就换行。
方法二:使用列表推导式和异常处理
```python
def is_prime(num):
if num <= 1:
return False
for i in range(2, int(num**0.5)+1):
if num % i == 0:
return False
return True
try:
m, n = map(int, input("请输入范围m和n:").split())
prime_list = [num for num in range(m, n+1) if is_prime(num)]
for i in range(len(prime_list)):
if i % 8 == 0:
print()
print(prime_list[i], end=' ')
except ValueError:
print("输入格式错误,请输入正确的数字范围!")
```
这里我们使用列表推导式来生成素数列表,然后使用`try-except`语句来处理输入格式错误的异常。如果输入格式错误,我们输出提示信息。否则,我们遍历素数列表,每输出8个素数就换行。
方法三:使用生成器和异常处理
```python
def is_prime(num):
if num <= 1:
return False
for i in range(2, int(num**0.5)+1):
if num % i == 0:
return False
return True
def prime_range(m, n):
for num in range(m, n+1):
if is_prime(num):
yield num
try:
m, n = map(int, input("请输入范围m和n:").split())
prime_gen = prime_range(m, n)
count = 0
for num in prime_gen:
print(num, end=' ')
count += 1
if count % 8 == 0:
print()
except ValueError:
print("输入格式错误,请输入正确的数字范围!")
```
这里我们定义了一个生成器`prime_range`来生成素数,然后使用`try-except`语句来处理输入格式错误的异常。如果输入格式错误,我们输出提示信息。否则,我们遍历素数生成器,每输出8个素数就换行。
阅读全文