📜  查找除以N但严格小于N的最大复合数(1)

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

查找除以N但严格小于N的最大复合数

什么是复合数?

复合数是指除了1和本身以外,还可以被其他数整除的正整数。

例如,4是一个复合数,因为它可以被2整除。而7是一个质数,因为它只能被1和7整除。

解题思路

要寻找除以N但严格小于N的最大复合数,可以从N-1开始倒序遍历,找出第一个复合数即可。

如何判断一个数是复合数呢?可以从2开始到该数的平方根的所有正整数中,检查是否能被整除。如果存在能被整除的数,则该数就是一个复合数。如果都不能被整除,则该数就是一个质数。

代码实现
def is_composite(n):
    if n < 4:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return True
    return False

def find_largest_composite_divisible_by_n(n):
    for i in range(n-1, 1, -1):
        if i % n == 0 and is_composite(i):
            return i
    return -1

其中,is_composite(n)函数可以判断一个数是否为复合数;find_largest_composite_divisible_by_n(n)函数则是查找除以n但严格小于n的最大复合数。

测试样例
assert find_largest_composite_divisible_by_n(4) == 6
assert find_largest_composite_divisible_by_n(6) == 4
assert find_largest_composite_divisible_by_n(7) == 4
assert find_largest_composite_divisible_by_n(8) == 14
assert find_largest_composite_divisible_by_n(11) == 8

以上是几个测试样例,可以验证一下代码的正确性。

总结

本文介绍了如何查找除以N但严格小于N的最大复合数,主要思路就是判断一个数是否为复合数,然后倒序遍历即可。通过测试样例可以看出,代码的正确性还是很不错的。