gpt4 book ai didi

prolog - 初学者 - 添加 3 和 5 的倍数

转载 作者:行者123 更新时间:2023-12-01 10:07:18 25 4
gpt4 key购买 nike

我试图找到 1000 以下的 3 和 5 的所有正倍数的总和。在添加应该从 5 的倍数的总和中删除 3 的倍数的部分后,gprolog 将继续吐出“No "用于查询 ?- sigma(1000,N)。

问题显然出在 sigma5 上,但我不太清楚:

sigma(Num, Result) :- sigma3(Num, 3, Result3),
sigma5(Num, 5, Result5),
Result is Result3 + Result5.

sigma3(Num, A, Result) :- A < Num,
Ax is A+3,
sigma3(Num, Ax, ResultX),
Result is ResultX + A.
sigma3(Num, A, Result) :- A >= Num,
Result is 0.

sigma5(Num, A, Result) :- A < Num,
mod3 is A mod 3,
0 \= mod3,
Ax is A+5,
sigma5(Num, Ax, ResultX),
Result is ResultX + A.
sigma5(Num, A, Result) :- A < Num,
mod3 is A mod 3,
0 == mod3,
Ax is A+5,
sigma5(Num, Ax, ResultX),
Result is ResultX.
sigma5(Num, A, Result) :- A >= Num,
Result is 0.

我的代码有什么问题?

最佳答案

由于涉及整数,请考虑使用 finite domain constraints .例如,使用 SWI-Prolog:

?- use_module(library(clpfd)).
true.

?- findall(N, (N mod 3 #= 0 #\/ N mod 5 #= 0, N in 0..999, indomain(N)), Ns),
sum(Ns, #=, Sum).
Ns = [0, 3, 5, 6, 9, 10, 12, 15, 18|...],
Sum = 233168.

关于prolog - 初学者 - 添加 3 和 5 的倍数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9181356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com