题解 | kotori和素因子

kotori和素因子

https://www.nowcoder.com/practice/7b1c858a3e7a41ed8364178979eaae67

def is_prime(number):
    """
    判断一个数是否为质数
    Args:
        number: 需要判断的数字
    Returns:
        bool: 是否为质数
    """
    if number < 2:
        return False

    # 只需要检查到平方根即可
    for divisor in range(2, int(number ** 0.5) + 1):
        if number % divisor == 0:
            return False

    return True


def find_minimum_prime_factors_sum(
    current_index, used_factors, current_sum, numbers, min_sum
):
    """
    使用深度优先搜索找出每个数的一个质因子,使得这些质因子互不相同且和最小
    Args:
        current_index: 当前处理的数字索引
        used_factors: 已使用的质因子集合
        current_sum: 当前已选质因子的和
        numbers: 输入的数字列表
        min_sum: 当前找到的最小和
    Returns:
        int: 找到的最小和,如果无解则返回float('inf')
    """
    # 基础情况:所有数字都已处理完
    if current_index == len(numbers):
        return min(min_sum, current_sum)

    current_number = numbers[current_index]

    # 尝试当前数字的所有可能质因子
    for factor in range(2, current_number + 1):
        if (
            current_number % factor == 0
            and is_prime(factor)
            and factor not in used_factors
        ):

            # 选择这个质因子
            used_factors.add(factor)
            min_sum = find_minimum_prime_factors_sum(
                current_index + 1, used_factors, current_sum + factor, numbers, min_sum
            )
            # 回溯:移除这个质因子
            used_factors.remove(factor)

    return min_sum


def main():
    """
    主函数:处理输入并输出结果
    """
    # 读取输入
    n = int(input())
    numbers = list(map(int, input().split()))

    # 初始化参数
    used_factors = set()
    initial_min_sum = float("inf")

    # 执行搜索
    result = find_minimum_prime_factors_sum(
        0, used_factors, 0, numbers, initial_min_sum
    )

    # 输出结果
    if result == float("inf"):
        print(-1)
    else:
        print(result)



main()

全部评论

相关推荐

xiaolihuam...:当然还有一种情况是你多次一面挂,并且挂的原因都比较类似,例如每次都是算法题写不出来。面试官给你的评价大概率是算法能力有待加强,算法能力有待提高,基础知识掌握的不错,项目过关,但是coding要加强。短期内高强度面试并且每次都是因为同样的原因挂(这个你自己肯定很清楚),会形成刻板印象,因为你偶尔一次算法写不出来,面试官自己也能理解,因为他清楚的知道自己出去面试也不一定每一次面试算法都能写出来。但是连续几次他发现你的面屏里面都是算法有问题,他就认为这不是运气问题,而是能力问题,这种就是很客观的评价形成了刻白印象,所以你要保证自己。至少不能连续几次面试犯同样的错。算法这个东西比较难保证,但是有些东西是可以的,例如某一轮你挂的时候是因为数据库的索引,这个知识点答的不好,那你就要把数据库整体系统性的复习,下一轮面试你可以,项目打的不好,可以消息队列答的不好,但是绝对不可以数据库再答的不好了。当然事实上对于任何面试都应该这样查漏补缺,只是对于字节来说这个格外重要,有些面试官真的会问之前面试官问过的问题
点赞 评论 收藏
分享
09-17 17:09
门头沟学院 Java
雨忄:有人给出过解法,拖晚点去,然后到时候再找其他理由商量,既增加他们的筛人成本,不一定会给你收回offer ,也能占位避免工贼
秋招的嫡长offer
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务