RosettaCodeData/Task/Perfect-totient-numbers/Ruby/perfect-totient-numbers.rb
2023-07-01 13:44:08 -04:00

20 lines
319 B
Ruby

require "prime"
class Integer
def φ
prime_division.inject(1) {|res, (pr, exp)| res *= (pr-1) * pr**(exp-1) }
end
def perfect_totient?
f, sum = self, 0
until f == 1 do
f = f.φ
sum += f
end
self == sum
end
end
puts (1..).lazy.select(&:perfect_totient?).first(20).join(", ")