Stern-Brocot sequence: Difference between revisions

Content added Content deleted
(Added Algol 68)
(Add BCPL)
Line 1,423: Line 1,423:
</pre>
</pre>


=={{header|BCPL}}==
<lang bcpl>get "libhdr"

manifest $( AMOUNT = 1200 $)

let gcd(a,b) =
a>b -> gcd(a-b, b),
a<b -> gcd(a, b-a),
a

let mkstern(s, n) be
$( s!1 := 1
s!2 := 1
for i=2 to n/2 do
$( s!(i*2-1) := s!i + s!(i-1)
s!(i*2) := s!i
$)
$)

let find(v, n, max) = valof
for i=1 to max
if v!i=n then resultis i

let findwrite(v, n, max) be
writef("%I3 at %I4*N", n, find(v, n, max))

let start() be
$( let stern = vec AMOUNT
mkstern(stern, AMOUNT)
writes("First 15 numbers: ")
for i=1 to 15 do writef("%N ", stern!i)
writes("*N*NFirst occurrence:*N")
for i=1 to 10 do findwrite(stern, i, AMOUNT)
findwrite(stern, 100, AMOUNT)
if valof
$( for i=2 to AMOUNT
unless gcd(stern!i, stern!(i-1)) = 1
resultis false
resultis true
$) then
writes("*NThe GCD of each pair of consecutive members is 1.*N")
$)</lang>
{{out}}
<pre>First 15 numbers: 1 1 2 1 3 2 3 1 4 3 5 2 5 3 4

First occurrence:
1 at 1
2 at 3
3 at 5
4 at 9
5 at 11
6 at 33
7 at 19
8 at 21
9 at 35
10 at 39
100 at 1179

The GCD of each pair of consecutive members is 1.</pre>
=={{header|C}}==
=={{header|C}}==
Recursive function.
Recursive function.