如何在Prolog中获取列表的LCM?假设列表是: 1,2,3,4,5,而LCM将是60。我有以下的代码为GCD和LCM,工作2个数字,但不知道如何应用到列表。
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.发布于 2022-03-07 10:15:59
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.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,例如:
%% 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。
https://stackoverflow.com/questions/71371782
复制相似问题