19 lines
429 B
Plaintext
19 lines
429 B
Plaintext
main =>
|
|
foreach (I in 2..2**19, is_perfect(I))
|
|
println(I)
|
|
end.
|
|
|
|
is_perfect(N) => sum_rationals([$frac(1,D) : D in divisors(N)]) == $frac(2,1).
|
|
|
|
divisors(N) = [I : I in 1..N, N mod I == 0].
|
|
|
|
add(frac(A,B), frac(C,D)) = new_fract(A*D+B*C, B*D).
|
|
|
|
new_fract(A,B) = $frac(Num, Den) =>
|
|
G = gcd(A,B),
|
|
Num = A // G,
|
|
Den = B // G.
|
|
|
|
sum_rationals([X]) = X.
|
|
sum_rationals([X,Y|T]) = sum_rationals([add(X,Y)|T]).
|