📜  查找给定乘积的两个不同质数(1)

📅  最后修改于: 2023-12-03 14:55:35.723000             🧑  作者: Mango

查找给定乘积的两个不同质数

本文将介绍一种算法,用于查找给定乘积的两个不同质数。该算法基于质数的性质,具有时间复杂度 O(sqrt(n))。

问题描述

给定一个正整数 n,要求找出两个不同的质数 p,q,满足 p*q=n。如果不存在这样的质数对,则返回空。

算法思路

我们可以考虑从小到大依次枚举因子,检查每一个因子是否为质数,并且判断 n/f 是否也为质数。如果都是质数,那么返回这对质数。

为了减少枚举范围,我们可以只枚举到 sqrt(n)。因为如果 p > sqrt(n),那么 q < sqrt(n);如果 q > sqrt(n),那么 p < sqrt(n)。

代码实现

下面是用 Python 实现的代码片段:

import math

def is_prime(num: int) -> bool:
    if num < 2:
        return False
    for i in range(2, int(math.sqrt(num))+1):
        if num % i == 0:
            return False
    return True

def find_prime_factors(n: int) -> tuple:
    for i in range(2, int(math.sqrt(n))+1):
        if n % i == 0:
            p, q = i, n//i
            if is_prime(p) and is_prime(q):
                return (p, q)
    return None
测试样例

下面是对上述代码进行测试的一些样例:

assert find_prime_factors(15) == (3, 5)
assert find_prime_factors(21) == None
assert find_prime_factors(35) == (5, 7)
assert find_prime_factors(77) == (7, 11)
总结

本文介绍了一种查找给定乘积的两个不同质数的算法,并给出了 Python 实现及测试样例。该算法利用了质数的性质,不仅具有较高的效率,而且可扩展性强,适用于大部分场景。