额,第一次动脑筋写erlang程序。

A language that doesn't affect the way you think about programming, is not worth knowing.
                                                                                                                                                 --Alan J. Perlis
如果一门计算机语言不能影响你对编程的看法,那根本就不必知晓

那按这个说法的话,erlang值得我们了解的语言之一,因为erlang将“并行"集成到语言当中,
内置并行编程模型的编程语言多多少少都得益于Functional Programming,
(包括现在主流的java,也有一些FP特性)

用FP语言来解数学计算问题是很有趣的,以前就从g9的blog上听说这个好玩的地方
http://projecteuler.net
不过区区一直都赖得去晃。


虽然平时是个老实的C++程序员,但是本着重在参与的原则,区区也就看了几篇erlang的tuturial,
发现内容与SICP相比实在只能算是子集,不过掌握基本语法之后,练习一下是必要的,找谁呢?
projecteuler呗~




-module(m1).
-compile(export_all).

%%utils
find(_, []) -> [];
find(Pred, [H|T]) ->
    Flag = (Pred(H)),
    if
        Flag ->
            H;
        true ->
            find(Pred, T)
    end.



%%euler #3
bpf(N) ->
    bigest_prime_factor(N).

bpf_iter(Current, N, Biggest) ->
    if
        N rem Current == 0 ->
            bpf_iter(Current, N div Current, Current);
        Current < N ->
            bpf_iter(Current + 1 , N, Biggest);
        true ->
            Biggest
    end.

bigest_prime_factor(N) ->
    bpf_iter(2, N, 1).


%%euler #4
is_mul_of_3(N) ->
    length([Y || Y <- lists:seq(100,999)
                     , N rem Y == 0
                     , N div Y < 1000
                     , N div Y >99]) > 0.

is_pal(N) ->
    integer_to_list(N) == lists:reverse(integer_to_list(N)).

bpi_find() -> %now we use find/1
    find(fun(X) -> is_pal(X) and is_mul_of_3(X) end,lists:seq(1000000, 1, -1)).


%%euler #5
gcd(M,N) ->
    if
        N > M ->
            gcd(N,M);
        M rem N == 0 ->
            N;
        true ->
            gcd(N, M rem N)
    end.

ben_find(N) ->
    lists:foldl(fun (X,Acc) -> X * Acc div gcd(X, Acc) end, 1, lists:seq(1,N)).
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值