我是Erlang的新手,只是有一个问题。 我已经在StackOverflow上看了一下并完成了很多Google搜索。
我试图编写一个带有两个参数并返回它们之间的素数的函数。我最大的问题是Prime测试(检查数字是否为素数)。我稍后会解决剩下的问题。
这是我到目前为止的代码:
-module(ListPrime).
-export([primeList/2]).
primeList(0, 0)->
io:format("No prime numbers here ~s~n", [0]);
`
primeList(Start, Finish)->
CheckPrime = Finish rem Start,
if
Start =< Finish, CheckPrime == 1 -> primeList(Start, Finish-1)
end.
基本上我要做的是:
检查Finish是否为素数。
如果没有,请转到下一个号码(完成-1)。
继续,直到达到基本案例。
它编译但显然没有做我想做的事情,因为我不知道如何检查数字是否为素数。
我知道素数的定义是什么(一个只能被它自身整除的数字和1)但是当我想到这个定义时,我想到的唯一想法就是:
Finish rem Finish
和代码行适用于任何使用的数字。如何检查Erlang中的数字是否为素数?非常感谢你。
答案 0 :(得分:0)
下面的代码将测试一个数字是否为素数。只需调用函数isPrime,它将返回true或false。
-module(isPrime).
-export([isPrime/1]).
isPrime(0)-> false;
isPrime(1)-> false;
isPrime(2)-> true;
isPrime(N)->
ChPrime = N rem 2,
if
ChPrime == 1 -> false;
ChPrime =:= 1 -> true
end.
答案 1 :(得分:0)
试试这个,我希望它工作正常,只需调用函数true
,它将返回false
的{{1}}:
divisors(N) ->
[ X || X <- lists:seq(1,N), (N rem X)==0].
prime(N) when N == 0; N == 1 ->
false;
prime(2) ->
true;
prime(N) ->
divisors(N) == [1,N].
答案 2 :(得分:0)
试试这个:
prime([X|_]) when X =< 1 -> error(not_a_prime);
prime([X|Ns]) -> [N || N <- Ns, N rem X /= 0].
答案 3 :(得分:0)
您需要来电功能! 就这样做:
%% caller function
run(X, Y) ->
prime(lists:seq(X, Y)).
%% prime function
prime([X|_]) when X =< 1 -> error(not_a_prime);
prime([X|Ns]) -> [N || N <- Ns, N rem X /= 0].
lists:seq(X, Y) :=
在两个数字之间创建一个列表
答案 4 :(得分:-1)
这可能不是设置功能的最有效方法,但是它起作用:
prime(2)->true;
prime(N)when N rem 2 =:= 0-> false;
prime(3)->true;
prime(Odd)->prime(Odd,3).
prime(N,I)when N rem I =:= 0->false;
prime(N,I)when I*I > N->true;
prime(N,I)->prime(N,I+2).
primes(Start,Finish)->[X|| X <- lists:seq(Start,Finish), prime(X)].