获取一个数的因数

Sal*_*n A 1 php numbers factors

我需要得到给定数字 ( n ) 的两个因子 ( x, y ),使得:

  • x * y <= n
  • x * y 应该尽可能接近 n
  • x 和 y 应尽可能彼此靠近。

例子:

  • n = 16 => x = 4,y = 4
  • n = 17 => x = 4,y = 4
  • n = 18 => x = 6, y = 3
  • n = 20 => x = 5,y = 4

任何语言都可以,但最好是 php。

编辑——澄清

我想创建一个矩形,x 单位宽 * y 单位高,使其面积尽可能接近 n。x 和 y 必须是整数。如果 n 是素数,则 n - 1 的因数是可以接受的。

Yac*_*oby 5

你的规格不够准确。你说你想要因子,但在你的测试用例中 4不是17 的因子

以下伪代码优先考虑一个因素是准确的

for i in range(ceiling(sqrt(n)), 1){
    if ( n modulo i ) == 0 {
          x = i
          y = round(n/i)
    }
}
Run Code Online (Sandbox Code Playgroud)

简单的 sqrt 语句可以确保数字尽可能接近,但不能保证它们是因数。

x = y = round( sqrt(n) )
Run Code Online (Sandbox Code Playgroud)