理解用于找到数字x和y的排列的代码(小于n),使得x * y是完美的正方形并且y -x是最大的(x <y)

时间:2014-03-24 09:37:40

标签: algorithm

我在编程博客中阅读此功能来执行上述任务,但我无法理解。 (x * y也应该是最大的。)同样,最大化x * y的偏好大于y-x。

       long long ans = 0;
        int X,Y;

    for( i = 2;i <= n / i;++i){
        int k = n / (i * i);
        int y = k *i*i;
        int x = k * (i - 1) * (i - 1);

        if((long long)x * y > ans){
            ans = (long long)x * y;
            X = x;
            Y = y;
        }
    }

1 个答案:

答案 0 :(得分:0)

  1. i <= n / i确保值xy小于n,因为它们来自循环内i的平方。
    k派生自nixy又来自k和{{1} }}。)
  2. iint k = n / (i * i);int y = k * i * i;确保值int x = k * (i - 1) * (i - 1);是完美的正方形。
    (因为x * y = x * yk * k * i * i * (i - 1) * (i - 1)x * y)的完美平方。
    此外,k * i * (i - 1)小于x,因为y来自x(i - 1)来自y
  3. 最后i循环中的三个陈述只是跟踪最大if的对。