Итак, я пытаюсь сделать программу с помощью java. его ввод является целым числом, целые числа рассматриваются как сумма из трех целых чисел a, b и c (a^2 + b^2 = c^2
), его выход равен c^2. Для этого я разворачиваю уравнение: a^2 + b^2 - c^2 = 0
и c = sum - a - b
, получите . Затем я получаю a + b <= sum*2/3
, затем подставляю все комбинации a, b в уравнение, чтобы увидеть, когда оно равно нулю.эффективный алгоритм для пифагорейских троек в java
Вот мой код:
/** Pythagorean Triples
* test case for small numbers
* Tony
*/
import java.util.*;
public class Solution54 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int times = sc.nextInt();
for (int i = 0; i < times; i++) {
/* prompt the sum and get the equation:
* Math.pow(sum, 2) - 24 * (a + b) + 2a*b = 0;
* we consider b >= a;
*/
double sum = sc.nextDouble();
double ablimits = Math.floor(sum/3 * 2); // a + b <= ablimits
double alimits = Math.floor(ablimits/2); // a <= alimits
//System.out.println("another round");
//System.out.print(alimits + " " + blimits);
A: for (double a = 1; a <= alimits; a++) {
B: for (double b = a; b <= sum - a; b++) {
double result = Math.pow((sum-a-b),2)-a*a-b*b;
//System.out.print("when a is " + a + " " + "when b is " + b + ":" + result + ";");
if (Math.pow(sum, 2) - 2 * sum * (a + b) + 2 * a * b == 0) {
double answer = a*a + b*b;
int output = (int)answer;
System.out.print(output + " ");
break A;
}
}
}
}
}
}
Когда я вход 1 12
, он дает 25 (потому что a,b,c=3,4,5; c^2 = 25
), но он не может обрабатывать большие входы, как 14808286
, потому что мой алгоритм не является достаточно эффективным. Каков эффективный способ сделать это? Plz!
Я не следую за вашей начальной математикой. Откуда это уравнение: 'c = sum - a - b'? –
Вы хотите ввести ** единственное целое число ** с именем 'sum', где' sum = a + b + c', а целые числа 'a',' b' и 'c' являются пифагорейскими тройками и имеют программа выводит квадрат 'c'? – PEF
@PEF да, я говорю, что –