Created
June 28, 2020 21:49
-
-
Save PrivateGER/d4080b1836f16983312ea4e31c1cef3c to your computer and use it in GitHub Desktop.
Erlang Prime Generator
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule M do | |
require Integer | |
import :math, only: [sqrt: 1] | |
def main do | |
IO.puts("Generating large primes...") | |
IO.puts "Nummer: #{generate_large_number()}" | |
IO.puts "Nummer: #{generate_large_number()}" | |
check_if_prime(13) | |
for n <- 1..1000 do | |
spawn(M, :prime_check_and_stdout, []) | |
end | |
end | |
def prime_check_and_stdout() do | |
number = generate_large_number() | |
if(is_number_odd(number)) do | |
is_prime = check_if_prime number | |
#IO.puts number | |
if is_prime do | |
IO.puts("#{number} is prime!!!") | |
end | |
end | |
end | |
def generate_large_number do | |
Enum.random(999999999..99999999999999999) | |
end | |
def is_number_below_threshold(number, threshold) do | |
number < threshold | |
end | |
def is_number_odd(number) do | |
rem(number, 2) !== 0 | |
end | |
def check_if_prime_using_bruteforce(number, n, upTo) do | |
cond do | |
rem(number, n) == 0 -> false | |
n < upTo -> check_if_prime_using_bruteforce(number, n + 1, upTo) | |
n >= upTo -> true | |
true -> IO.puts "What? n: #{n}, number: #{number}, upTo: #{upTo}" | |
end | |
end | |
def check_if_prime(number) do | |
!is_number_below_threshold(number, 2) && is_number_odd(number) && check_if_prime_using_bruteforce(number, 2, trunc(sqrt number)) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment