【问题标题】:Pairs of Positive Integers with loops带循环的正整数对
【发布时间】:2013-05-24 03:48:56
【问题描述】:

(顺便说一句,我们还没有使用数组。我在我的循环章节中)

我需要编写一个 Java 程序,它会输出所有正整数对 (a,b),使得 a 和 b 大于或等于 0 且小于或等于 1000 以及比率 (a^2 + b^2 + 1) / (a*b) 是一个整数。

我的方法是做一个嵌套循环

for (a = 0; a <= 1000; a++)
    for (b = 0; b <= 1000; b++)
    {
        //answer = a^2 + b^2 + 1 / (a*b)
        //if (answer % 1 == 0)
        //    System.out.println("(" + a + ", " + b + ")") 
    }

这样会正常工作还是我看这个问题都错了

【问题讨论】:

  • 您应该使用if( (a*a + b*b + 1) % (a*b) == 0 ) 来查看a²+b²+1 是否可以被ab 整除。立即使用 % 适用于所有数字类型。由于整数除法,您当前的方法仅适用于浮点类型(floatdouble)。将int 除以int 将得到int

标签: java loops for-loop nested nested-loops


【解决方案1】:

我认为你的方法是正确的,

但有一件事你要确定,

您正在使用表达式:answer = a^2 + b^2 + 1 / (a*b)

但您在问题中提到(a^2 + b^2 + 1) / (a*b)

所以请确保您使用的是那些括号,否则运算符优先级可能会给您带来一些问题

就像1 / (a*b) 会在(a*b) 完成后解决,你不希望这样,对吧。所以请注意运算符优先级或使用括号。

【讨论】:

    【解决方案2】:

    使用嵌套循环将是一个详尽的搜索,并且可能是解决此问题的最直接的方法。有几点要记住:

    1. ^ 运算符实际上是一个XOR operator。使用 Math.pow(a, 2) 或 a * a,如果您想使用 a
    2. 注意整数除法
    3. 您可能希望从 1 而不是 0 开始循环

    【讨论】:

    • 我在总结这就是为什么它是评论而不是代码。我必须使用我必须从 0(大于或等于)开始的公式
    • 明白了。我建议不要从 0 开始,因为您说的是 positive 整数,并且当除以 0 时(例如,当 a 和 b 都为 0 时)您的比率将导致 NaN 或异常(在整数除法的情况下)
    【解决方案3】:

    我可以将你的表达方式改为:

    1. (a^2 + b^2 + 1+2ab-2ab) / (a*b)
    2. ((a+b)^2-2ab)/(a*b)
    3. (a+b)^2/ab -2

    所以方程很简单,现在您需要检查 (a+b)^2/ab > 2。最终检查是 2 个数字的总和应该能被它们的乘积整除。

    检查 a=0 和 b=0,因为它们都是除数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-20
      • 2021-01-19
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      • 1970-01-01
      • 2014-03-22
      相关资源
      最近更新 更多