Поскольку есть два уравнения (a+b+c = 1000
&& aˆ2 + bˆ2 = cˆ2
) с тремя переменными, мы можем решить это за линейное время, просто просматривая все возможные значения одной переменной, а затем мы можем решить две другие переменные в константе время.
Из первой формулы мы получаем b=1000-a-c
, и если мы заменим b во 2-й формуле на это, мы получим c^2 = aˆ2 + (1000-a-c)ˆ2
, что упрощается до c=(aˆ2 + 500000 - 1000a)/(1000-a)
.
Затем мы перебираем все возможные значения a, решаем c и b с помощью приведенных выше формул, и, если условия выполняются, мы находим наш триплет.
int n = 1000;
for (int a = 1; a < n; a++) {
int c = (a*a + 500000 - 1000*a) / (1000 - a);
int b = (1000 - a - c);
if (b > a && c > b && (a * a + b * b) == c * c) {
return a * b * c;
}
}