首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Erlang中的项目Euler #3

Erlang中的项目Euler #3
EN

Stack Overflow用户
提问于 2011-06-20 17:51:12
回答 2查看 647关注 0票数 2

我正在尝试用Erlang编写项目Euler #3:

代码语言:javascript
复制
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?

下面是我的代码:

代码语言:javascript
复制
-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]).

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

代码语言:javascript
复制
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

为什么我会有这个错误,我如何修复它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-20 18:03:37

第一个错误是不言而喻的:如果余数大于1,则没有子句匹配。尝试将第二个子句更改为

代码语言:javascript
复制
_Else ->
         problem_3(Num, F+1)

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

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

代码语言:javascript
复制
problem_3(Num div F, F);

而不是。

票数 6
EN

Stack Overflow用户

发布于 2018-02-06 21:32:44

以下是一些关于加速解决方案的后期建议。

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

不需要检查2号。

变化

代码语言:javascript
复制
problem_3(Num, F + 1)

problem_3(Num, F + 2)

没有理由去检查偶数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6409466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档