我正在尝试用Erlang编写项目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为什么我会有这个错误,我如何修复它?
发布于 2011-06-20 18:03:37
第一个错误是不言而喻的:如果余数大于1,则没有子句匹配。尝试将第二个子句更改为
_Else ->
problem_3(Num, F+1)它匹配余数不为零的所有情况。
对于第二个错误,我认为它是由表达式Num / F引起的。这会产生一个浮点数,而problem_3需要整数参数。试一试
problem_3(Num div F, F);而不是。
发布于 2018-02-06 21:32:44
以下是一些关于加速解决方案的后期建议。
start()-> problem_3(600851475143, 3).
不需要检查2号。
变化
problem_3(Num, F + 1)至
problem_3(Num, F + 2)
没有理由去检查偶数。
https://stackoverflow.com/questions/6409466
复制相似问题