首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列表PROLOG的LCM

列表PROLOG的LCM
EN

Stack Overflow用户
提问于 2022-03-06 15:45:06
回答 1查看 263关注 0票数 0

如何在Prolog中获取列表的LCM?假设列表是: 1,2,3,4,5,而LCM将是60。我有以下的代码为GCD和LCM,工作2个数字,但不知道如何应用到列表。

代码语言:javascript
复制
gcd(X, 0, X) :- !.
gcd(X, Y, Z) :-
    H is X rem Y,
    gcd(Y, H, Z).
lcm(X,Y,LCM):-
    gcd(X,Y,GCD),
    LCM is X*Y//GCD.
EN

回答 1

Stack Overflow用户

发布于 2022-03-07 10:15:59

代码语言:javascript
复制
gcd_of_list([], 0) :- !.
gcd_of_list([X|Xs], GCD) :- gcd_of_list(Xs, GCD2), gcd(X, GCD2, GCD). 

?- gcd_of_list([150,1000,120], GCD).
GCD = 10.
代码语言:javascript
复制
lcm_of_list([],1) :- !.
lcm_of_list([X|Xs],LCM) :- lcm_of_list(Xs,LCM2), lcm(X,LCM2,LCM).

?- lcm_of_list([9, 7, 10, 9, 7, 8, 5, 10, 1],LCM).
LCM = 2520.

顺便说一句,一个有趣的结果是,您不能使用gcd_of_list直接计算lcm_of_list,例如:

代码语言:javascript
复制
%% A wrong attempt 
lcm_of_list(Lst, LCM) :-
  gcd_of_list(Lst, GCD),
  mul_list(Lst, Mul),
  LCM is Mul // GCD.

请参阅https://math.stackexchange.com/a/319310/430364

不能用abc和gcd(a,b,c)的值作为输入来计算lcm(a,b,c)。

因此,我们必须从头开始计算lcm_of_list

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

https://stackoverflow.com/questions/71371782

复制
相关文章

相似问题

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