Pell numbers

func pell_number(n) {
    lucasU(2, -1, n)
}

func pell_lucas_number(n) {
    lucasV(2, -1, n)
}

say ("The first 10 Pell numbers: ", 10.of(pell_number).join(", "))
say ("The first 10 Pell-Lucas numbers: ", 10.of(pell_lucas_number).join(", "))

say "\nFirst 10 rational approximations to √2:"
{|n| pell_lucas_number(n) / 2 / pell_number(n) }.map(1..10).each {|r|
    say "#{'%10s' % r.as_frac} =~ #{r.as_float}"
}

var pell_prime_indices = 10.by {|n| pell_number(n).is_prime }
say "\nThe first 10 Pell primes: "
pell_prime_indices.each {|n|
    say "Pell(#{'%2s' % n}) = #{pell_number(n)}"
}

say ("\nThe first 10 Newman-Shank-Williams numbers: ",
    10.of{|n| pell_number(2*n) + pell_number(2*n + 1) }.join(', '))

say "\nThe first 10 Pythagorean triples corresponding to near isosceles right triangles:"
10.of{|n| pell_number(2*n + 1) }.map {|h|
    var t = isqrt(h**2 >> 1)
    assert_eq(t**2 + (t+1)**2, h**2)
    [t, t+1, h]
}.each{.say}

Output:

Last updated

Was this helpful?