所以我试图在Prolog中尝试如何获取输入,并返回它是否是一个完美的数字。目前我已经关闭,但无法弄清楚为什么它不按我想要的方式运作。 我通过递归来接近这个。如果X%N == 0,则将N和TT(总)添加到TT1。 N将减1,函数将被递归调用,直到达到1,然后将总数与输入数X进行比较。 我的代码是:
factors(X,N,TT) :-
( 0 is X mod N -> TT1 is N + TT ),
TT = TT1,
( N > 1 -> N1 is N-1, factors(X, N1, TT1)
; TT1 = X
).
perfect(X) :-
factors(X, X-1, 0).
目前正在返回所有输入均为假。我希望这不是主要的错误,只需要调整。
干杯
答案 0 :(得分:0)
这里有一个解决方案,希望有所帮助
factors(_,N,N,_).
factors(X,N,NT,Sum):-
N < NT,
( 0 is X mod N ->
Sum1 = Sum + N
; Sum1 = Sum),
N1 is N + 1,
factors(X,N1,NT,Sum1).
perfect(X):-
XT is X/2 + 1,
factors(X,1,XT,0).