判斷質數與合數的邏輯很相似,都是判斷一個屬除了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 # 否則是質數