题目
输入一个数,如果是素数就输出"yes",否则输出"no"
方法一:暴力枚举法
def is_prime(x):
if x==1:
return false;
for i in range(2,x):
if x%i==0:
return false
return true
n=int(input())
if is_prime(n):
print("yes")
else:
print("no")自定义函数is_prime(),首先排除1,然后再对该数之前的数进行枚举,当遇到能被当前的数整除时返回false,若没有数能将其整除意味着这个数是素数,返回true。然后对返回的结果进行判断从而输出"yes"或"no"
当然,我们可以省去最后if-else的判断,直接在函数is_prime()里来输出"yes"或"no"
def is_prime(x):
if x==1:
print("no")
return
for i in range(2,x):
if x%i==0:
print("no")
break
else:
print("yes")
n=int(input())
is_prime(n)for-else语句
在上面的代码中,我采用了for-else语句,这是一个比较特殊的语句。当for循环正常结束时,else也会执行,而当for循环未正常结束,例如使用break提前退出时,则不会执行。使用这个语句往往可以减少代码量,避免使用flag。
方法二:内置函数
import sympy
n = int(input())
if sympy.isprime(n):
print("yes")
else:
print("no")使用python自带的sympy库中的isprime()函数仅需一行就能判断素数
方法三:优化了时间复杂度
import math
def is_prime(n):
if n <= 1:
return false
if n <= 3:
return true
if n % 2 == 0 or n % 3 == 0:
return false
for i in range(5, int(math.sqrt(n)) + 1, 6):
if n % i == 0 or n % (i + 2) == 0:
return false
return true优化后的代码利用了以下观察:
1.所有的素数都是6的倍数加减1(除了2和3)。
2.如果n可以整除2或3,它肯定不是素数。
3.如果n不是2或3的倍数,并且不能整除6的倍数加减1的数,那么它也不是素数。所以可以只在6的倍数加减1的数中进行枚举,跳过其他数字。这样可以减少循环的次数,提高效率。
附:打印素数
方法一:
1、打印指定范围内的素数
def sushu3(c):
import math
m = 2
list = []
while m < c:
j = 2
# 只要从2判断到根号m,若m不能被其中的任何一个数整除,则m为素数
while j <= math.sqrt(m):
if m % j == 0:
break
j = j + 1
if (j > math.sqrt(m)):
list.append(m)
m = m + 1
print(f"{c}以内的素数:{list}")
# 调用方法sushu3方法,打印100以内的素数
if __name__ == '__main__':
sushu3(100)
方法二:
2、打印指定区间内的素数
def sushu4():
min = int(input("请输入起始值:"))
max = int(input("请输入终止值:"))
list = []
# 循环遍历指定区间内的数
for i in range(min, max + 1):
if i > 1:
# 除了1和本身以外的数,如果能被除则break退出
for j in range(2, i):
if (i % j) == 0:
break
# 若不能被1和本身的数除则追加到list列表
else:
list.append(i)
print(f"{min}~{max}区间内的素数有:{list}")总结
到此这篇关于python判断素数的3种方法及for-else语句的用法介绍的文章就介绍到这了,更多相关python判断素数及for-else语句内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论