Я пытаюсь написать программу, которая собирает все пифагорейские троек, равные заданному числу; например, вызов main(12)
должен вернуть [{3,4,5}]
. Но когда я запускаю свой код, ответ []
. Можете ли вы сказать мне, что я делаю неправильно?Результат Erlang в аккумуляторе
-module(triples).
-export([main/1]).
t1(A, B, C) ->
{A-2*B+2*C, 2*A-B+2*C, 2*A-2*B+3*C}.
t2(A, B, C) ->
{A+2*B+2*C, 2*A+B+2*C, 2*A+2*B+3*C}.
t3(A, B, C) ->
{2*B+2*C-A, B+2*C-2*A, 2*B+3*C-2*A}.
find_triples(A,B,C,Max,Acc) when (A+B+C) < Max ->
if
A+B+C == Max ->
Acc = lists:append(Acc,[{A,B,C}])
end,
{A1,B1,C1} = t1(A,B,C),
Acc = find_triples(A1,B1,C1,Max,Acc),
{A2,B2,C2} = t2(A,B,C),
Acc = find_triples(A2,B2,C2,Max,Acc),
{A3,B3,C3} = t3(A,B,C),
Acc = find_triples(A3,B3,C3,Max,Acc);
find_triples(_A,_B,_C,Max,Acc) ->
Acc.
find_triples(Num) ->
find_triples(3,4,5,Num,[]).
main(D) ->
Answer = find_triples(D),
io:fwrite("Wynik: ~w~n", [ Answer ]).
какой алгоритм вы хотите реализовать? –
Я использую отношение, описанное здесь http://en.wikipedia.org/wiki/Pythagorean_triple#Parent.2Fchild_relationships – whd