RosettaCodeData/Task/Fermat-numbers/Langur/fermat-numbers.langur
2024-04-19 16:56:29 -07:00

28 lines
636 B
Text

val .fermat = fn(.i) 2 ^ 2 ^ .i + 1
val .factors = fn(var .x) {
for[.f=[]] .i, .s = 2, trunc .x ^/ 2; .i < .s; .i += 1 {
if .x div .i {
.f ~= [.i]
.x \= .i
.s = trunc .x ^/ 2
}
} ~ [.x]
}
writeln "first 10 Fermat numbers"
for .i in 0..9 {
writeln $"F\(.i + 16x2080:cp) = \(.fermat(.i))"
}
writeln()
writeln "factors of first few Fermat numbers"
for .i in 0..9 {
val .ferm = .fermat(.i)
val .fac = .factors(.ferm)
if len(.fac) == 1 {
writeln $"F\(.i + 16x2080:cp) is prime"
} else {
writeln $"F\(.i + 16x2080:cp) factors: ", .fac
}
}