判断质数与合数

判断质数与合数的逻辑很相似,都是判断一个属除了1和它本身,能不能被其他数整除。

其他数包括质数与合数,合数能表示能质数的乘积,因此问题就转化为:一个数能不能被除了1和它本身之外的其他质数整除。

质数2,3,5,7,11,13,.....

质数除了2,3,能表示为6k+-1(k=1,2,...)

该算法通过数学优化(6k ± 1 规则)和范围优化(只检查到 √n),实现了高效的质数判断。

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

    # 主循环:检查 6k ± 1 的数
    for i in range(5, int(math.sqrt(n)) + 1, 6):
        if n % i == 0 or n % (i + 2) == 0:
            return False

    # 如果没有找到因数,返回 True
    return 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  # 否则是质数

你可能感兴趣的:(算法)