Project Euler #3 in Erlang
我正在尝试在Erlang编写项目Euler 3代码:
1 2 | The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 600851475143 ? |
这是我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | -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]). |
但是我有两个关于这个代码的问题:
1 2 3 4 5 6 7 | 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 |
为什么我会有这样的错误,我如何修复它?
第一个错误很容易解释:如果余数大于1,则没有子句匹配。尝试将第二个子句改为
1 2 | _Else -> problem_3(Num, F+1) |
它匹配所有余数不是零的情况。
对于第二个错误,我认为它是由表达式
1 | problem_3(Num div F, F); |
相反。
为加快解决速度而提出的一些建议。
problem_3(600851475143, 3).
不需要检查2号。
变化
1 | problem_3(Num, F + 1) |
到
没有理由检查偶数。