c-有没有一种方法可以找到一个int的两个最接近的整数因子



我是一个初学者,仍在学习C,我不知道如何找到彼此最接近的int因子。

例如,如果输入是数字6,则输出为[2,3]。如果输入是24,那么输出将是[4,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,这是所有其他数字的因子。

最新更新