我是初学者还在向我们学习C而且我不知道如何找到彼此最接近的int因子。
例如,如果输入为数字6,则输出为[2,3]。如果输入为24,则输出为[4,6]。
有办法做到这一点吗?任何帮助将不胜感激。
答案 0 :(得分:6)
这样做的算法很简单;将数字的平方根作为整数(您希望截断,而不是舍入)。测试该值是否是您输入的因素;如果是这样,您的输入除以该数字就是您的答案。否则,从先前的值中减去1,然后重试。
在代码中(数组文字是错误的语法,但理论是正确的):
//this code assumes that your input is > 0, will not work otherwise
function int[] getClosestFactors(int input) {
int testNum = (int)sqrt(input);
while (input % testNum != 0) {
testNum--;
}
return {testNum, input / testNum};
}
基本上,您知道在任何一对因子中,最低因子必须小于或等于平方根。因此,如果从等于或小于输入的平方根的整数开始,并倒数,则找到的第一个因子将是最近因子对中较小的一个。这终止于所有整数> 0因为你最终会达到1,这是所有其他数字的一个因素。