wip1 mobius
This commit is contained in:
parent
536dbf6f15
commit
9fb2fe18cc
|
@ -0,0 +1,48 @@
|
|||
%%%-------------------------------------------------------------------
|
||||
%%% @author ivan-igorevich
|
||||
%%% @copyright (C) 2023, self
|
||||
%%% @doc
|
||||
%%%
|
||||
%%% @end
|
||||
%%% Created : 13. Feb 2023 8:49 AM
|
||||
%%%-------------------------------------------------------------------
|
||||
-module(mobius).
|
||||
-author("ivan-igorevich").
|
||||
|
||||
%% API
|
||||
-export([is_prime/1, prime_factors/1, say/0]).
|
||||
|
||||
%% region is_prime
|
||||
is_prime(N) when N < 2 ->
|
||||
false;
|
||||
is_prime(N) ->
|
||||
is_prime(N, 2, trunc(math:sqrt(N)) + 1).
|
||||
|
||||
is_prime(_, Max, Max) ->
|
||||
true;
|
||||
is_prime(N, I, Max) ->
|
||||
if
|
||||
N rem I =:= 0 ->
|
||||
false;
|
||||
true ->
|
||||
is_prime(N, I + 1, Max)
|
||||
end.
|
||||
%% endregion
|
||||
|
||||
%region factor
|
||||
prime_factors(N) ->
|
||||
prime_factors(N, 2, []).
|
||||
|
||||
prime_factors(X, N, Primes) when X rem N == 0 ->
|
||||
prime_factors(trunc(X / N), 2, [N | Primes]);
|
||||
prime_factors(X, N, Primes) ->
|
||||
case N < math:sqrt(X) + 1 of
|
||||
true ->
|
||||
prime_factors(X, N + 1, Primes);
|
||||
false ->
|
||||
[X | Primes]
|
||||
end.
|
||||
%endregion
|
||||
|
||||
say() -> io:format("The result is: ~p~n", [prime_factors(111)]).
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
%%%-------------------------------------------------------------------
|
||||
%%% @author ivan-igorevich
|
||||
%%% @copyright (C) 2023, self
|
||||
%%% @doc
|
||||
%%%
|
||||
%%% @end
|
||||
%%% Created : 13. Feb 2023 9:03 AM
|
||||
%%%-------------------------------------------------------------------
|
||||
-module(mobius_test).
|
||||
-include_lib("eunit/include/eunit.hrl").
|
||||
|
||||
mobius_test_() -> [
|
||||
{"Test is_prime", fun test_is_prime/0}
|
||||
].
|
||||
|
||||
test_is_prime() ->
|
||||
?assertNot(mobius:is_prime(1)),
|
||||
?assert(mobius:is_prime(2)),
|
||||
?assert(mobius:is_prime(3)),
|
||||
?assertNot(mobius:is_prime(58)),
|
||||
?assert(mobius:is_prime(59)),
|
||||
?assertNot(mobius:is_prime(60)),
|
||||
?assertNot(mobius:is_prime(112)),
|
||||
?assert(mobius:is_prime(113)).
|
Loading…
Reference in New Issue