2

Erlang で Project Euler #3 をコーディングしようとしています:

The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?

これが私のコードです:

-module(problem_3).
-compile(export_all).

start()->
    problem_3(600851475143, 2).

problem_3(Num, F) when Num > 1 ->
    case Num rem F of
    0 ->
        problem_3(Num / F, F);
    1 ->
        problem_3(Num, F + 1)
    end;

problem_3(Num, F) ->
    io:format("result: ~p~n", [F]).

しかし、このコードには 2 つの問題があります。

5> problem_3:start().
** exception error: no case clause matching 2
     in function  problem_3:problem_3/2

6> problem_3:problem_3(10, 2).
** exception error: bad argument in an arithmetic expression
     in function  problem_3:problem_3/2

このエラーが発生する理由と修正方法を教えてください。

4

2 に答える 2

6

最初のエラーはかなり自明です。余りが1より大きい場合、一致する句はありません。2番目の句を次のように変更してみてください

_Else ->
         problem_3(Num, F+1)

これは、余りがゼロでないすべての場合に一致します。

2番目のエラーについては、式に起因すると思います Num / F。これにより浮動小数点数が生成されますが、problem_3整数の引数が必要です。試す

problem_3(Num div F, F);

代わりは。

于 2011-06-20T10:03:37.297 に答える