Stern-Brocot sequence: Difference between revisions
Content added Content deleted
Not a robot (talk | contribs) (Add Modula-2) |
Not a robot (talk | contribs) (Add CLU) |
||
Line 1,797: | Line 1,797: | ||
true |
true |
||
</pre> |
</pre> |
||
=={{header|CLU}}== |
|||
<lang clu>stern = proc (n: int) returns (array[int]) |
|||
s: array[int] := array[int]$fill(1, n, 1) |
|||
for i: int in int$from_to(2, n/2) do |
|||
s[i*2-1] := s[i] + s[i-1] |
|||
s[i*2] := s[i] |
|||
end |
|||
return (s) |
|||
end stern |
|||
gcd = proc (a,b: int) returns (int) |
|||
while b ~= 0 do |
|||
a, b := b, a//b |
|||
end |
|||
return (a) |
|||
end gcd |
|||
find = proc [T: type] (a: array[T], val: T) returns (int) signals (not_found) |
|||
where T has equal: proctype (T,T) returns (bool) |
|||
for i: int in array[T]$indexes(a) do |
|||
if a[i] = val then return (i) end |
|||
end |
|||
signal not_found |
|||
end find |
|||
start_up = proc () |
|||
po: stream := stream$primary_output() |
|||
s: array[int] := stern(1200) |
|||
stream$puts(po, "First 15 numbers:") |
|||
for i: int in int$from_to(1, 15) do |
|||
stream$puts(po, " " || int$unparse(s[i])) |
|||
end |
|||
stream$putl(po, "") |
|||
for i: int in int$from_to(1, 10) do |
|||
stream$putl(po, "First " || int$unparse(i) || " at " || |
|||
int$unparse(find[int](s, i))) |
|||
end |
|||
stream$putl(po, "First 100 at " || int$unparse(find[int](s, 100))) |
|||
begin |
|||
for i: int in int$from_to(2, array[int]$high(s)) do |
|||
if gcd(s[i-1], s[i]) ~= 1 then |
|||
exit gcd_not_one(i) |
|||
end |
|||
end |
|||
stream$putl(po, "The GCD of every pair of adjacent elements is 1.") |
|||
end except when gcd_not_one(i: int): |
|||
stream$putl(po, "The GCD of the pair at " || int$unparse(i) || " is not 1.") |
|||
end |
|||
end start_up</lang> |
|||
{{out}} |
|||
<pre>First 15 numbers: 1 1 2 1 3 2 3 1 4 3 5 2 5 3 4 |
|||
First 1 at 1 |
|||
First 2 at 3 |
|||
First 3 at 5 |
|||
First 4 at 9 |
|||
First 5 at 11 |
|||
First 6 at 33 |
|||
First 7 at 19 |
|||
First 8 at 21 |
|||
First 9 at 35 |
|||
First 10 at 39 |
|||
First 100 at 1179 |
|||
The GCD of every pair of adjacent elements is 1.</pre> |
|||
=={{header|Common Lisp}}== |
=={{header|Common Lisp}}== |