判断质数与合数的逻辑很相似,都是判断一个属除了1和它本身,能不能被其他数整除。
其他数包括质数与合数,合数能表示能质数的乘积,因此问题就转化为:一个数能不能被除了1和它本身之外的其他质数整除。
质数2,3,5,7,11,13,.....
质数除了2,3,能表示为6k+-1(k=1,2,...)
该算法通过数学优化(6k ± 1
规则)和范围优化(只检查到 √n
),实现了高效的质数判断。
import mathdef is_prime(n):# 处理特殊情况if n <= 1:return Falseif n <= 3:return Trueif n % 2 == 0 or n % 3 == 0:return False# 主循环:检查 6k ± 1 的数for i in range(5, int(math.sqrt(n)) + 1, 6):if n % i == 0 or n % (i + 2) == 0:return False# 如果没有找到因数,返回 Truereturn True
def is_composite(n):if n <= 1:return False # 1 和小于 1 的数既不是质数也不是合数if n <= 3:return False # 2 和 3 是质数,不是合数if n % 2 == 0 or n % 3 == 0:return True # 能被 2 或 3 整除的数一定是合数# 检查 6k ± 1 形式的数for i in range(5, int(n**0.5) + 1, 6):if n % i == 0 or n % (i + 2) == 0:return True # 如果能被整除,则是合数return False # 否则是质数