RosettaCodeData/Task/Perfect-numbers/Wren/perfect-numbers-2.wren
2024-03-06 22:25:12 -08:00

30 lines
609 B
Text

import "./math" for Int
var isPerfect = Fn.new { |n|
if (n <= 2) return false
var tot = 1
for (i in 2..n.sqrt.floor) {
if (n%i == 0) {
tot = tot + i
var q = (n/i).floor
if (q > i) tot = tot + q
}
}
return n == tot
}
System.print("The first seven perfect numbers are:")
var count = 0
var p = 2
while (count < 7) {
var n = 2.pow(p) - 1
if (Int.isPrime(n)) {
n = n * 2.pow(p-1)
if (isPerfect.call(n)) {
System.write("%(n) ")
count = count + 1
}
}
p = p + 1
}
System.print()