Prolog中的完美数字

时间:2017-12-11 21:47:03

标签: prolog perfect-numbers

所以我试图在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).

目前正在返回所有输入均为假。我希望这不是主要的错误,只需要调整。

干杯

1 个答案:

答案 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).