当前位置:   article > 正文

【Python】判断素数的三种方法以及for-else语句的介绍_python判断素数

python判断素数

4b0e7be7561645748c4514a6300bfada.png

 

 

题目

输入一个数,如果是素数就输出"Yes",否则输出"No"

方法一:暴力枚举法

  1. def is_prime(x):
  2. if x==1:
  3. return False;
  4. for i in range(2,x):
  5. if x%i==0:
  6. return False
  7. return True
  8. n=int(input())
  9. if is_prime(n):
  10. print("Yes")
  11. else:
  12. print("No")

自定义函数is_prime(),首先排除1,然后再对该数之前的数进行枚举,当遇到能被当前的数整除时返回False,若没有数能将其整除意味着这个数是素数,返回True。然后对返回的结果进行判断从而输出"Yes"或"No"

当然,我们可以省去最后if-else的判断,直接在函数is_prime()里来输出"Yes"或"No"

  1. def is_prime(x):
  2. if x==1:
  3. print("No")
  4. return
  5. for i in range(2,x):
  6. if x%i==0:
  7. print("No")
  8. break
  9. else:
  10. print("Yes")
  11. n=int(input())
  12. is_prime(n)

for-else语句

在上面的代码中,我采用了for-else语句,这是一个比较特殊的语句。当for循环正常结束时,else也会执行,而当for循环未正常结束,例如使用break提前退出时,则不会执行。使用这个语句往往可以减少代码量,避免使用flag。

方法二:内置函数

  1. import sympy
  2. n = int(input())
  3. if sympy.isprime(n):
  4. print("Yes")
  5. else:
  6. print("No")

使用python自带的sympy库中的isprime()函数仅需一行就能判断素数

方法三:优化了时间复杂度

  1. import math
  2. def is_prime(n):
  3. if n <= 1:
  4. return False
  5. if n <= 3:
  6. return True
  7. if n % 2 == 0 or n % 3 == 0:
  8. return False
  9. for i in range(5, int(math.sqrt(n)) + 1, 6):
  10. if n % i == 0 or n % (i + 2) == 0:
  11. return False
  12. return True

优化后的代码利用了以下观察:

1.所有的素数都是6的倍数加减1(除了2和3)。
2.如果n可以整除2或3,它肯定不是素数。
3.如果n不是2或3的倍数,并且不能整除6的倍数加减1的数,那么它也不是素数。所以可以只在6的倍数加减1的数中进行枚举,跳过其他数字。这样可以减少循环的次数,提高效率。 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/518930
推荐阅读
相关标签
  

闽ICP备14008679号