【发布时间】:2015-11-18 22:13:36
【问题描述】:
给定一个数 N,我们如何找到最大 P*Q
我的(蛮力)尝试:
- 找到所有素数 P 的列表 {P, N/P}
- 找到素数 Q 的列表,使得 Q 是正下方的最大素数 上面列表中的 N/P
- 从上面确定最大乘积 P*Q
虽然这种蛮力方法可行,但是否有正式(更明智)的解决方案来解决这个问题?
示例:N=27
√N = 5.196
Candidate primes: 2,3,5 --> [{2,13.5},{3,9},{5,5.4}] ->[{2,13},{3,7},{5,5}]
Solution: Max([2*13, 3*7, 5*5]) = 2*13 = 26
因此,蛮力解决方案有效。
更进一步,我们看到 Q_max = √N。
我们可以将我们的解决方案集优化为仅那些值 {P, N\2},其中 N\2 >= √N。
我选择了整数除法“\”,因为我们只对整数值感兴趣,而且整数除法确实比常规除法“/”快得多
问题简化为:
示例:N=27
√N = 5.196
Candidate P: 2,3 --> [{2,13},{3,9}] -->[{2,13},{3,7}]
(we drop {5,5} since N\P < √N i.e. 5 < 5.196)
Solution set: max([2*13, 3*7]) = 2*13 = 26
它可能看起来微不足道,但它只是消除了 1/3 的可能解决方案集。
我们可以添加其他巧妙的程序来进一步减少集合吗?
【问题讨论】:
-
您提到了有问题的互质数,但您问过“P 和 Q 是质数吗?”。你需要素数还是互素数?
-
这是一个已知的难题。如果你有效地解决它,你就可以破解 RSA 加密并变得富有和/或出名。
-
任何两个(不相等的)素数总是互质的,这是多余的。那么,在 P==Q 的情况下,您是否禁止 P*Q?如果不是,那么标题中的“互质”必须去掉。
-
@JohnColeman P 和 Q 相同可能是允许的。如果没有“互质”这个词,它是允许的。
-
@CharlesO 因为此方法按降序分解数字。所以只有两个质因数的第一个是最大的。 :)
标签: algorithm primes multiplication