zoukankan      html  css  js  c++  java
  • erlang 求N以内的质数

       素数,又称质数,在一个大于1的自然数中,除了1和此整数自身之外,不能被其他自然数整除的数。
       比1大但不是素数的数称为合数。
       1和0既不是素数,也不是合数。
       算术基本定理证明每个大于1的正整数都可以写成素数的乘积,并且这种乘积的形式是唯一的。

     1 -module(get_prime).
     2 
     3 -compile(export_all).
     4 
     5 test_cost_time(N) ->    
     6     % N为传入具体的数量,这里使用erlang自带的timer:tc测试所消耗时间
     7     timer:tc(?MODULE,get_prime,[N]).
     8 
     9 get_prime(N) ->
    10     length(get_prime(2, N, [])).
    11 
    12 
    13 get_prime(Seq, Seq, List) ->
    14     List;
    15 
    16 get_prime(Seq, N, List) ->
    17     Rec = for_prime(Seq),
    18     if  
    19         Rec =:= null ->
    20             get_prime(Seq + 1, N, List);
    21         true ->
    22             get_prime(Seq + 1, N, [Rec | List])
    23     end.
    24 
    25 %判断某一个具体的数是否为质数
    26 for_prime(Seq) ->
    27     SqrtValue = trunc(math:sqrt(Seq)),
    28     for_prime(Seq, lists:seq(2, SqrtValue), 1).
    29 
    30 for_prime(_Seq, [], 0) ->
    31     null;
    32 
    33 for_prime(Seq, [], _) ->
    34     Seq;
    35 
    36 for_prime(_Seq, _, 0) ->
    37     null;
    38 
    39 for_prime(Seq, [Num | List], _) ->
    40     for_prime(Seq, List, Seq rem Num).
    View Code

    结果如下:

     


    前一个为消耗的微秒数,后一个为N以内总共有多少个质数. 
    在erlang中,随着数字的扩大,其消耗的时间也是急剧增加的,暴露了erlang计算能力较差的缺点。
    说明,erlang不适合做计算密集型的场景,而其特点还是在IO密集型的场景(如网关等)。

  • 相关阅读:
    INFO: InstallShield不同版本对中文字符串的支持程度
    Basic INFO: InstallShield 2012安装过程
    [Android] 打印Log的行号、函数、类名
    gridgian 网格计算
    Activity及Dialog的全透明
    设计工具
    ps 多图层扣图
    spket js ide
    a 的样式
    js开发规范
  • 原文地址:https://www.cnblogs.com/unqiang/p/9516535.html
Copyright © 2011-2022 走看看