2013-05-24 3 views
0

(Btw мы не использовали массивы пока нет. Im в моей главе петли)пар положительных чисел с петлями

мне нужно написать программу Java, которая будет выводить все пары натуральных чисел (а, б) такие, что 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 + ")") 
    } 

бы, что будет работать должным образом или я смотрел на эту проблему все неправильно

+1

Вы должны использовать 'if ((a * a + b * b + 1)% (a * b) == 0)', чтобы определить, делится ли a² + b² + 1 на ab. Использование '%' сразу работает на всех числовых типах. Ваш текущий подход работает только с типами с плавающей запятой ('float' и' double') из-за целочисленного деления. Разделение 'int' на' int' приведет к 'int'. –

ответ

1

Я думаю, что ваш подход является правильным,

Но одна вещь, которую вы убедитесь,

Вы используете выражение: answer = a^2 + b^2 + 1/(a*b)

Но вы упомянули в своем вопросе как (a^2 + b^2 + 1)/(a*b).

Поэтому убедитесь, что вы используете эти скобки, в противном случае оператор старшинства может вызвать у вас некоторые проблемы

Как 1/(a*b) будет решена после того, как (a*b) завершена, и вы не хотите его, как это, правильно. Поэтому позаботьтесь о приоритете оператора или используйте скобки.

0

Использование вложенных циклов будет исчерпывающим поиском и, вероятно, является наиболее прямым подходом к этой проблеме. Несколько вещей, чтобы иметь в виду:

  1. Оператор ^ фактически является XOR operator. Использование Math.pow (а, 2) или a * a, если вы хотите Sqaure a
  2. Остерегайтесь целочисленным деления
  3. Вы, вероятно, хотите, чтобы начать свою петлю на 1 вместо 0
+0

Я подвел итог тому, почему это был комментарий, а не код. Я должен использовать эту формулу Я должен начать с 0 (больше или равно EQUAL) – Bob

+0

Gotcha. Я предложил не начинать с 0, потому что вы сказали _positive_ integers, а когда ныряли на 0 (например, когда a и b оба равны 0), ваше отношение приведет к NaN или исключению (в случае целочисленного деления) – DannyMo

0

я могу изменить свой выражение следующим образом:

  1. (а^2 + B^2 + 1 + 2ab-2ab)/(а * б)
  2. ((а + б)^2-2ab)/(а * b)
  3. (а + Ь)^2/аб -2

Так Уравнение просто теперь вам нужно проверить, что (а + Ь)^2/аб> 2. Проверка Окончательный является то, что сумма 2 числа должны быть делятся на их произведение.

Добавить проверку для a = 0 и b = 0, поскольку оба являются делителями.