📅  最后修改于: 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 实现及测试样例。该算法利用了质数的性质,不仅具有较高的效率,而且可扩展性强,适用于大部分场景。