【问题标题】:Perfect Number in PrologProlog中的完美数
【发布时间】:2023-03-14 07:40:01
【问题描述】:

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

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

干杯

【问题讨论】:

  • 看起来,在factors/3 中,TT 已经绑定(通过调用)。然后,如果您计算TT1 is N + TT,然后检查统一TT = TT1,那么统一失败,因为TTTT1 可能绑定到不同的值。您的意思是TT = TT1TT1 is N + TT 的替代品吗?在这种情况下,您的 ->/2 表达式和以下统一检查需要“调整”。
  • your friend 是同一个班级吗? Maybe this one 也是?
  • @lurker:做好准备,很快雷神之锤就属于你了。

标签: prolog perfect-numbers


【解决方案1】:

这里有一个解决方案,希望对你有帮助

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

【讨论】:

    猜你喜欢
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多