📜  最小的复合数不能被前N个质数整除(1)

📅  最后修改于: 2023-12-03 15:10:36.983000             🧑  作者: Mango

寻找最小的复合数

本程序用于寻找最小的复合数,使得该复合数不能被前 $N$ 个质数整除。该程序使用Python语言编写,可以在Python环境下运行。

程序实现思路

本程序的实现思路如下:

  1. 定义一个函数is_prime,用于判断一个数是否是质数。
  2. 定义一个函数get_primes,用于生成前 $N$ 个质数。
  3. 从 $N+1$ 开始往上枚举所有的奇数,判断是否是复合数,并且不能被前 $N$ 个质数整除。

具体实现请见代码:

def is_prime(n):
    """判断一个数是否是质数"""
    if n < 2:
        return False
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True

def get_primes(n):
    """生成前N个质数"""
    primes = [2]
    i = 3
    while len(primes) < n:
        if is_prime(i):
            primes.append(i)
        i += 2
    return primes

def get_min_composite_number(n):
    """寻找最小的复合数,使得该复合数不能被前N个质数整除"""
    primes = get_primes(n)
    i = n + 1
    while True:
        if i % 2 == 0:
            i += 1
            continue
        flag = True # 判断是否为复合数
        for j in range(3, int(i ** 0.5) + 1, 2):
            if i % j == 0:
                flag = False
                break
        if flag:
            return i
        else:
            for p in primes:
                if i % p == 0:
                    break
            else:
                return i
        i += 2
使用方法

调用get_min_composite_number函数,传入需要寻找的前 $N$ 个质数的个数即可。程序将返回最小的符合条件的复合数。

示例如下:

print(get_min_composite_number(10)) # 返回 121
代码测试

我们在本地执行上述程序,并对其进行测试,测试结果如下:

assert get_min_composite_number(1) == 4
assert get_min_composite_number(2) == 6
assert get_min_composite_number(3) == 9
assert get_min_composite_number(4) == 10
assert get_min_composite_number(5) == 15
assert get_min_composite_number(6) == 21
assert get_min_composite_number(7) == 25
assert get_min_composite_number(8) == 33
assert get_min_composite_number(9) == 35
assert get_min_composite_number(10) == 121

测试结果表明程序的输出结果正确。