85 lines
1.6 KiB
Lua
85 lines
1.6 KiB
Lua
function sameDigits(n,b)
|
|
local f = n % b
|
|
n = math.floor(n / b)
|
|
while n > 0 do
|
|
if n % b ~= f then
|
|
return false
|
|
end
|
|
n = math.floor(n / b)
|
|
end
|
|
return true
|
|
end
|
|
|
|
function isBrazilian(n)
|
|
if n < 7 then
|
|
return false
|
|
end
|
|
if (n % 2 == 0) and (n >= 8) then
|
|
return true
|
|
end
|
|
for b=2,n-2 do
|
|
if sameDigits(n,b) then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function isPrime(n)
|
|
if n < 2 then
|
|
return false
|
|
end
|
|
if n % 2 == 0 then
|
|
return n == 2
|
|
end
|
|
if n % 3 == 0 then
|
|
return n == 3
|
|
end
|
|
|
|
local d = 5
|
|
while d * d <= n do
|
|
if n % d == 0 then
|
|
return false
|
|
end
|
|
d = d + 2
|
|
|
|
if n % d == 0 then
|
|
return false
|
|
end
|
|
d = d + 4
|
|
end
|
|
|
|
return true
|
|
end
|
|
|
|
function main()
|
|
local kinds = {" ", " odd ", " prime "}
|
|
|
|
for i=1,3 do
|
|
print("First 20" .. kinds[i] .. "Brazillion numbers:")
|
|
local c = 0
|
|
local n = 7
|
|
while true do
|
|
if isBrazilian(n) then
|
|
io.write(n .. " ")
|
|
c = c + 1
|
|
if c == 20 then
|
|
print()
|
|
print()
|
|
break
|
|
end
|
|
end
|
|
if i == 1 then
|
|
n = n + 1
|
|
elseif i == 2 then
|
|
n = n + 2
|
|
elseif i == 3 then
|
|
repeat
|
|
n = n + 2
|
|
until isPrime(n)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
main()
|