32 lines
946 B
Plaintext
32 lines
946 B
Plaintext
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}
|