erlang 求N以內的質數

2022-03-19 15:01:55 字數 1484 閱讀 7001

素數,又稱質數,在乙個大於1的自然數中,除了1和此整數自身之外,不能被其他自然數整除的數。

比1大但不是素數的數稱為合數。

1和0既不是素數,也不是合數。

算術基本定理證明每個大於1的正整數都可以寫成素數的乘積,並且這種乘積的形式是唯一的。

1 -module

(get_prime).

23 -compile(export_all).

45 test_cost_time(n) ->

6 %n為傳入具體的數量,這裡使用erlang自帶的timer:tc測試所消耗時間

7 timer:tc(?module,get_prime,[n]).

89 get_prime(n) ->

10 length(get_prime(2, n, )).

1112

13 get_prime(seq, seq, list) ->

14list;

1516 get_prime(seq, n, list) ->

17 rec =for_prime(seq),

18if

19 rec =:= null ->

20 get_prime(seq + 1, n, list);

21true ->

22 get_prime(seq + 1, n, [rec |list])

23end.24

25 %判斷某乙個具體的數是否為質數

26 for_prime(seq) ->

27 sqrtvalue =trunc(math:sqrt(seq)),

28 for_prime(seq, lists:seq(2, sqrtvalue), 1).

2930 for_prime(_seq, , 0) ->

31null;32

33 for_prime(seq, , _) ->

34seq;

3536 for_prime(_seq, _, 0) ->

37null;38

39 for_prime(seq, [num | list], _) ->

40 for_prime(seq, list, seq rem num).

view code

結果如下:

前乙個為消耗的微秒數,後乙個為n以內總共有多少個質數. 

在erlang中,隨著數字的擴大,其消耗的時間也是急劇增加的,暴露了erlang計算能力較差的缺點。

說明,erlang不適合做計算密集型的場景,而其特點還是在io密集型的場景(如閘道器等)。

篩選法求n以內素數(質數)

設定乙個標誌陣列isprime,isprime i 的值是1就表示i是素數。開始陣列元素值全部為1劃掉k的倍數,就是把isprime 2 k isprime 3 k 置成0最後檢查isprime陣列,輸出isprime i 為1的那些i include include using namespace...

計算n以內的質數表

1.設計乙個時間複雜度低於o n 2 的演算法,計算n以內的質數表,並且計算你的演算法的複雜度.注 本文最初發表於汕頭大學鬱金香bbs.發信人 guomin cs03.working for tomorrow 信區 program 標 題 re 演算法考試樣題 發信站 鬱金香bbs站 2006年01...

篩法 求n以內質數個數

判斷n是否為素數 續篩法部分 區間篩法 若乙個數可以進行因數分解,則得到的兩個數一定是有乙個 x sqrt x x 另乙個 x sqrt x x 任何乙個數都可以拆分為若干個質因數的乘積,如6 2 3,7 1 7 複雜度o nn sqrt n n include using namespace st...