最快的方法是什么?
我的简单方法:
for (C = 1;C<sqrt(A);C++) {
B=A/(C*(C+1));
if B is natural then add B,C to the list of possible pairs.
}
它可以在少于 O(sqrt(A)) 的时间内完成吗?
解决方案
正如 Egor Skriptunoff 回答的那样,它可以在 O(cube_root(A)) 中轻松完成。
这是一个简单的javascript实现。
function findBCs(A) {
if (A / 2 != Math.floor(A / 2)) return [];
var solution = [];
var i;
var SR3 = Math.pow(A, 1 / 3);
for (i = 1; i <= SR3; i++) {
var B, C;
C = i;
B = A / (C * (C + 1));
if (B == Math.floor(B)) {
solution.push([B, C]);
}
B = i;
C = (-1 + Math.sqrt(1 + 4 * A / B)) / 2;
if (C == Math.floor(C)) {
solution.push([B, C]);
}
}
return solution;
}
我接受 Meh 的回答,因为它应该更好(除了它的实现有点复杂而且我没有测试过)。