print("Yes")
else:
 print(“No”)

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

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

def is_prime(x):
 if x1:
 print(“No”)
 return
 for i in range(2,x):
 if x%i0:
 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的数中进行枚举,跳过其他数字。这样可以减少循环的次数,提高效率。