Stern-Brocot sequence: Difference between revisions
Content added Content deleted
(Added Algol 68) |
Not a robot (talk | contribs) (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. |