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]).

但我对这段代码有两个问题:

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,则没有子句匹配。尝试将第二个子句更改为

_Else ->
         problem_3(Num, F+1)

它匹配余数不为零的所有情况。

对于第二个错误,我认为它是由表达式引起的 Num / F。这会产生一个浮点数,而problem_3需要整数参数。尝试

problem_3(Num div F, F);

反而。

于 2011-06-20T10:03:37.297 回答
0

一些用于加快解决方案的后期指针。

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

无需检查 2 号。

改变

problem_3(Num, F + 1)

problem_3(Num, F + 2)

没有理由检查偶数。

于 2018-02-06T13:32:43.623 回答