PROLOG:如何知道一个数字是否是一个完美的数字?

时间:2012-12-03 15:21:16

标签: prolog perfect-numbers

一个完美的数字是一个等于除其自身之外的所有除数之和的数字。 例如6 = 1 + 2 + 3,然后6是一个完美的数字。

我想知道如何在PROLOG中实现它。

你能给我一些想法吗?

1 个答案:

答案 0 :(得分:0)

-Hello Steven,你可能已经意识到PROLOG是一种声明性语言,我们用关系来表达程序逻辑。

你的任务是表达给定数字与其除数之和之间的关系。为了找到总和,您将必须遍历从1到Number-1的所有可能的整数(因为Number不包括在总和中)并测试给定的整数是否是输入数的除数。 如果整数是除数,则将其添加到当前总和,递增整数并重复任务,直到达到与输入数字具有相同值的整数。一旦你到达那里你所要做的就是检查总和(如果总和等于我们的输入数字,我们有一个完美的数字,否则我们没有)。下面给出了我们需要的谓词:

perfectNumber(Number) :- perfectNumber(Number,1,0).

perfectNumber(Number,Number,Sum):- Number = Sum.
perfectNumber(Number,CurrDivisor,CurrSum) :-  not(CurrDivisor = Number),
                                              NewDivisor is CurrDivisor+1,
                                              0 is mod(Number,CurrDivisor), 
                                              NewSum is CurrSum+CurrDivisor,
                                              perfectNumber(Number,NewDivisor,NewSum).

perfectNumber(Number,CurrDivisor,CurrSum) :- not(CurrDivisor = Number),
                                             NewDivisor is CurrDivisor+1,perfectNumber(Number,NewDivisor,CurrSum).

让我知道你的想法。