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密集型的场景(如网关等)。

  • 相关阅读:
    Unity网格合并_材质合并
    windows7任务管理器内存相关列详细解释
    移动平台unity3d优化
    各种移动GPU压缩纹理的使用方法
    opengl VAO ,VBO
    GPU 与CPU的作用协调,工作流程、GPU整合到CPU得好处
    Unity3d的批渲染 batch rendering
    Android真机调测Profiler
    图片占用内存计算方法
    Unity3D–Texture图片空间和内存占用分析
  • 原文地址:https://www.cnblogs.com/unqiang/p/9516535.html
Copyright © 2011-2022 走看看