1

所以我试图在 Prolog 中研究如何接受输入,并返回它是否是一个完美的数字。目前我很接近,但无法弄清楚为什么它没有按照我想要的方式工作。我正在通过递归来解决这个问题。如果 X %N == 0,则将 N 和 TT(total) 添加到 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).

目前它返回的是所有输入都是错误的。我希望这不是严重错误,只需要调整。

干杯

4

1 回答 1

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).
于 2017-12-11T22:36:54.260 回答