44 lines
981 B
Text
Executable file
44 lines
981 B
Text
Executable file
#!/usr/bin/env luajit
|
|
|
|
local primes = require 'primes'
|
|
|
|
local arrr = require 'arrr'
|
|
|
|
local parser = arrr {
|
|
{ "Enable batch factorization", "--batch", "-b" };
|
|
{ "Initialize prime table up to the Nth prime", "--initialize", "-n", "n", tonumber };
|
|
{ "Cache file", "--cache", "-c", 1, io.open };
|
|
}
|
|
|
|
local options = parser {...}
|
|
|
|
if options.cache then
|
|
local i = 1
|
|
for line in options.cache:lines() do
|
|
primes[i] = tonumber(line)
|
|
i = i + 1
|
|
end
|
|
end
|
|
|
|
if options.initialize then
|
|
for i=1, options.initialize do
|
|
local _ = primes[i]
|
|
end
|
|
end
|
|
|
|
if not options.batch then
|
|
local number = options[1] and tonumber(options[1])
|
|
if not number then
|
|
io.write("Please input a number: ")
|
|
number = assert(tonumber(io.read())) -- Try 351681238432 ;)
|
|
end
|
|
|
|
for i, factor in ipairs{primes:factorize(number)} do
|
|
print(factor)
|
|
end
|
|
else
|
|
for number in io.lines() do
|
|
number = assert(tonumber(number))
|
|
print(number.." = "..table.concat({primes:factorize(number)}, " + "))
|
|
end
|
|
end
|