【发布时间】:2015-01-28 03:06:21
【问题描述】:
我有两个数字 N 和 M。 我想有效地计算有多少对 a,b 使得 1
我知道计算这个的明显 N*M 算法。但我想要比这更好的东西。 感谢您提前提供任何帮助。伪代码会更有帮助。
编辑:我认为它可以在更好的时间完成,可能是 O(m+n) 或类似的东西,但直接从以前的对计算新的对,而不是遍历所有 a 和 b。
【问题讨论】:
-
我是否遗漏了什么,或者答案显然不只是取 1, 2, ..., N 和 1, 2, ..., M 的交集,然后将结果的每个成员配对与自己?
-
@iShouldUseAName:
2*8 == 16 -
@iShouldUseAName 一个快速反例:N=5,M=10。然后 (4,9) 有效,因为 4*9 = 36 = 6²。
-
这个问题没有什么太宽泛的。它要求解决类似于例如的具体问题的解决方案。欧拉计划。我看不到任何好的算法,但也许其他人可以。
标签: c++ math perfect-square