一个完美的数字是一个等于除其自身之外的所有除数之和的数字。 例如6 = 1 + 2 + 3,然后6是一个完美的数字。
我想知道如何在PROLOG中实现它。
你能给我一些想法吗?
答案 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).
让我知道你的想法。