RosettaCodeData/Task/Farey-sequence/Pluto/farey-sequence.pluto

31 lines
699 B
Plaintext

require "rat"
local int = require "int"
local fmt = require "fmt"
local function f(l, r, n)
local m = rat.of(l:getNum() + r:getNum(), l:getDen() + r:getDen())
if m:getDen() <= n then
f(l, m, n)
io.write($"{m:tostring()} ")
f(m, r, n)
end
end
-- Task 1: solution by recursive generation of mediants.
for n = 1, 11 do
local l = rat.of(0)
local r = rat.of(1)
io.write($"F({n}): {l:tostring()} ")
f(l, r, n)
print(r)
end
print()
-- Task 2: direct solution by summing totient function.
-- Sum totients to 1000.
local sum = 1
for n = 1, 1000 do
sum += int.totient(n)
if n % 100 == 0 then fmt.print("F(%4d): %7s", n, fmt.int(sum)) end
end