Erlang项目Euler#3
我想在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
为什么我有这个错误,我该如何解决它?
第一个错误是不言而喻的:如果余数大于1,则没有子句匹配。 尝试将第二个子句更改为
_Else ->
         problem_3(Num, F+1)
它匹配所有余数不为零的情况。
  对于第二个错误,我认为它来自表达式Num / F  这产生一个浮点数,而problem_3需要整数参数。  尝试 
problem_3(Num div F, F);
代替。
一些加速解决方案的后期指针。
 start()-> problem_3(600851475143, 3). 
不需要检查数字2。
更改
problem_3(Num, F + 1)
至
 problem_3(Num, F + 2) 
没有理由检查偶数。
链接地址: http://www.djcxy.com/p/80419.html