有没有办法找到最接近的int的2个完整因子?

时间:2015-02-04 18:13:02

标签: c function int

我是初学者还在向我们学习C而且我不知道如何找到彼此最接近的int因子。

例如,如果输入为数字6,则输出为[2,3]。如果输入为24,则输出为[4,6]。

有办法做到这一点吗?任何帮助将不胜感激。

1 个答案:

答案 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,这是所有其他数字的一个因素。