Project Euler - Problem 5 └ Project Euler

Problem 5

30 November 2001

2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.
What is the smallest number that is evenly divisible by all of the numbers from 1 to 20?


문제 5.
2520은 1~10까지의 수 모두에게 나머지 없이 나누어떨어지는 가장 작은 수이다.
1~20까지의 수 모두에게 나머지 없이 나누어떨어지는 가장 작은 수를 구하라.

  -> 1~20까지 수의 최소공배수(LCM)을 구하라.


erlang code.

-module( problem5 ).
-export( [calc/0] ).
-export( [gcd/2] ).
-export( [lcm/2] ).
-export( [list_lcm/1] ).

%% Problem 5
%% 30 November 2001
%%
%% 2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.
%%
%% What is the smallest number that is evenly divisible by all of the numbers from 1 to 20?

%Problem5 -> 1~20까지 숫자의 최소공배수를 구하라.
calc()->
        list_lcm( lists:seq(1, 20) ).

% 최대공약수를 구한다.
gcd( N, M ) when N rem M =:= 0 ->
        M;
gcd( N, M ) ->
        gcd( M, N rem M ).

% 최소공배수를 구한다.
lcm( N, M ) ->
        N*div gcd( N, M ).

% 리스트 내 숫자들의 최소공배수를 구한다.
list_lcm( LI ) when length(LI) > 2 ->
        [H|T] = LI,
        [TH | TT] = T,
        lcm( lcm( H, TH ), list_lcm( TT ) );
list_lcm( LI ) when length(LI) =:= 2 ->
        [H|_] = LI,
        lcm( H, lists:nth(2, LI) );
list_lcm( LI ) when length(LI) =:= 1 ->
        lists:nth(1, LI );
list_lcm( [] ) ->
        throw( { error, "빈 리스트." } ).



여전히 더러운 코드.


그새 예외처리를 배워서 예외 던지는 구문이 추가되었음. ㅇㅇ

덧글

  • 무아 2009/08/28 19:52 # 삭제 답글

    이코드는 참 신기한 코드 이군효
    프갤에서 보고 왔슴돠
  • Rei 2009/08/28 23:36 #

    좀 많이 독특하지요..
댓글 입력 영역


통계 위젯 (블랙)

01
9
53794

이 이글루를 링크한 사람 (블랙)

11