57 lines
1.3 KiB
Nim
57 lines
1.3 KiB
Nim
import math, strformat, strutils
|
|
|
|
iterator sternBrocot(): (int, int) =
|
|
## Yield index and value of the terms of the sequence.
|
|
var sequence: seq[int]
|
|
sequence.add 1
|
|
sequence.add 1
|
|
var index = 1
|
|
yield (1, 1)
|
|
yield (2, 1)
|
|
while true:
|
|
sequence.add sequence[index] + sequence[index - 1]
|
|
yield (sequence.len, sequence[^1])
|
|
sequence.add sequence[index]
|
|
yield (sequence.len, sequence[^1])
|
|
inc index
|
|
|
|
# Fiind first 15 terms.
|
|
var res: seq[int]
|
|
for i, n in sternBrocot():
|
|
res.add n
|
|
if i == 15: break
|
|
echo "First 15 terms: ", res.join(" ")
|
|
echo()
|
|
|
|
# Find indexes for 1..10.
|
|
var indexes: array[1..10, int]
|
|
var toFind = 10
|
|
for i, n in sternBrocot():
|
|
if n in 1..10 and indexes[n] == 0:
|
|
indexes[n] = i
|
|
dec toFind
|
|
if toFind == 0: break
|
|
for n in 1..10:
|
|
echo &"Index of first occurrence of number {n:3}: {indexes[n]:4}"
|
|
|
|
# Find index for 100.
|
|
var index: int
|
|
for i, n in sternBrocot():
|
|
if n == 100:
|
|
index = i
|
|
break
|
|
echo &"Index of first occurrence of number 100: {index:4}"
|
|
echo()
|
|
|
|
# Check GCD.
|
|
var prev = 1
|
|
index = 1
|
|
for i, n in sternBrocot():
|
|
if gcd(prev, n) != 1: break
|
|
prev = n
|
|
inc index
|
|
if index > 1000: break
|
|
if index <= 1000:
|
|
echo "Found two successive terms at index: ", index
|
|
else:
|
|
echo "All consecutive terms up to the 1000th member have a GCD equal to one."
|