36 lines
804 B
Plaintext
36 lines
804 B
Plaintext
local int = require "int"
|
|
local fmt = require "fmt"
|
|
|
|
local function is_square_free(n)
|
|
local i = 2
|
|
local sq = i * i
|
|
while sq <= n do
|
|
if n % sq == 0 then return false end
|
|
i = (i > 2) ? i + 2 : i + 1
|
|
sq = i * i
|
|
end
|
|
return true
|
|
end
|
|
|
|
local function mu(n)
|
|
assert(n >= 1, "Argument must be a positive integer")
|
|
if n == 1 then return 1 end
|
|
local sq_free = is_square_free(n)
|
|
local factors = int.factors(n)
|
|
if sq_free and #factors % 2 == 0 then return 1 end
|
|
if sq_free then return -1 end
|
|
return 0
|
|
end
|
|
|
|
print("The first 199 Möbius numbers are:")
|
|
for i = 0, 9 do
|
|
for j = 0, 19 do
|
|
if i == 0 and j == 0 then
|
|
io.write(" ")
|
|
else
|
|
fmt.write("% 3d ", mu(i * 20 + j))
|
|
end
|
|
end
|
|
print()
|
|
end
|