Rebol3 Code Examplex
Jacobsthal numbers
Generate the Jacobsthal sequence.
Rebol [
title: "Rosetta code: Jacobsthal numbers"
file: %Jacobsthal_numbers.r3
url: https://rosettacode.org/wiki/Jacobsthal_numbers
note: "Based on Red language solution"
]
jacobsthal: func [
"Computes the nth Jacobsthal number via the formula"
n [number!]
][
2 ** n - (-1 ** n) / 3
]
lucas: func [
"Computes the nth Lucas number."
n [number!]
][
2 ** n + (-1 ** n)
]
oblong: func [
"Computes the product of Jacobsthal numbers for n and n+1"
n [number!]
][
multiply jacobsthal n jacobsthal n + 1
]
if unset? :prime? [
;; When native prime? function is not available...
prime?: function [
"Returns true if the input is a prime number"
n [number!] "An integer to check for primality"
][
if 2 = n [return true]
if any [n <= 1 even? n] [return false]
limit: square-root n
candidate: 3
while [candidate < limit][
if n % candidate = 0 [return false]
candidate: candidate + 2
]
true
]
]
show: function [n fn][
cols: 12
repeat i n [
prin [pad to integer! fn subtract i 1 cols]
if i % 5 = 0 [prin newline]
]
prin newline
]
print "First 30 Jacobsthal numbers:"
show 30 :jacobsthal
print "First 30 Jacobsthal-Lucas numbers:"
show 30 :lucas
print "First 20 Jacobsthal oblong numbers:"
show 20 :oblong
print "First 10 Jacobsthal primes:"
primes: n: 0
while [primes < 10][
if prime? jacob: to integer! jacobsthal n [
print jacob
primes: primes + 1
]
n: n + 1
]