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

Pyr*_*inx 3 c int function

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

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

有没有办法做到这一点?任何帮助,将不胜感激.

Dav*_*ron 7

这样做的算法很简单; 将数字的平方根作为整数(您希望截断,而不是舍入).测试该值是否是您输入的因素; 如果是这样,您的输入除以该数字就是您的答案.否则,从先前的值中减去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};
}
Run Code Online (Sandbox Code Playgroud)

基本上,您知道在任何一对因子中,最低因子必须小于或等于平方根.因此,如果您从等于或小于输入的平方根的整数开始,并倒计时,您找到的第一个因子将是最近因子对中较小的一个.这将终止所有> 0的整数,因为您最终将达到1,这是所有其他数字的因子.

  • @ gnasher729虽然操作不是很清楚,但她的例子暗示她打算要求具有最小差异的"因子对",而不是任何两个因素.这一小小的澄清将充分说明预期的问题,同时也保证了独特性并与运作给出的例子保持一致.我想我已经回答了他打算提出的问题,尽管我承认我正在考虑她的动机. (2认同)