12345678910111213141516171819202122232425262728293031323334353637 |
- #!/usr/bin/ruby
- # Declare a function to generate the Stern-Brocot sequence
- func stern_brocot {
- var list = [1, 1];
- {
- list.append(list[0]+list[1], list[1]);
- list.shift;
- }
- }
- # Show the first fifteen members of the sequence.
- 1..15 -> map(stern_brocot()).join(' ').say;
- # Show the (1-based) index of where the numbers 1-to-10 first appears
- # in the sequence, and where the number 100 first appears in the sequence.
- [(1..10)..., 100].each { |i|
- var index = 1;
- var generator = stern_brocot();
- while (generator() != i) {
- ++index;
- }
- say "First occurrence of #{i} is at index #{index}";
- }
- # Check that the greatest common divisor of all the two consecutive
- # members of the series up to the 1000th member, is always one.
- var generator = stern_brocot();
- var (a, b) = (generator(), generator());
- {
- assert_eq(Math.gcd(a, b), 1);
- a = b;
- b = generator();
- } * 1000;
- say "All GCD's are 1";
|