当我们需要判断一个数字是否是质数的时候,我们可以借助于Python的循环语句和条件语句来实现。下面是Python判断质数的完整攻略:
什么是质数?
质数又称素数,指在大于1的自然数中,除了1和本身外,无法被其他自然数整除的数。
判断质数的常见方法
- 循环判断:从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
# 测试
print(is_prime(17)) # True
print(is_prime(27)) # False
上述代码中,我们定义了一个名为is_prime
的函数,用于判断一个整数是否是质数。函数的参数为num
,表示待判断的整数。在函数中,我们先判断num
是否小于等于1,若小于等于1,则直接返回False
,因为1以下的整数均不是质数。
接下来,我们使用for
循环从2到num-1
遍历所有可能的整数。在循环过程中,若发现num
能够被其中一个整数整除,就意味着num
不是质数,返回False
。如果num
不能被任何一个小于num
的正整数整除,则认为num
是一个质数,返回True
。
最后,我们调用is_prime
函数进行测试。可以看到,对于一个质数17,该函数返回True
;而对于一个非质数27,该函数返回False
。
优化算法
对于一个大于2的整数,如果它不能同时被2和3整除,那么它一定不能被大于√n的整数整除。基于这一点,我们可以在循环中每次减2,不必考虑偶数,缩短循环时间。
import math
def is_prime_better(num):
if num <= 2:
return num == 2
if num % 2 == 0 or num % 3 == 0:
return False
for i in range(5, int(math.sqrt(num))+1, 6):
if num % i == 0 or num % (i+2) == 0:
return False
return True
# 测试
print(is_prime_better(17)) # True
print(is_prime_better(27)) # False
上述代码中,我们重新定义了一个名为is_prime_better
的函数,用于判断一个整数是否是质数。在函数中,我们首先特判了num
为小于等于2的情况,如果num
等于2,返回True
;否则,如果num
是偶数或者能被3整除,返回False
。
接下来,我们使用一个for
循环,从5开始,每次加6遍历整数,判断num
是否能够被其中一个整数或者该整数加2整除。在循环结束后,如果num
不能被任何一个小于等于sqrt(num)
的正整数整除,则认为num
是一个质数,返回True
。
这种优化算法的效率比循环判断高得多。