2

完全数とは、自分自身を除いたすべての約数の合計に等しい数です。たとえば、6 = 1+2+3 の場合、6 は完全数です。

これをPROLOGに実装する方法を考えています。

アイデアを教えてください。

4

1 に答える 1

0

- こんにちはスティーブン、お気づきかもしれませんが、PROLOG は関係を使用してプログラム ロジックを表現する宣言型言語です。

あなたの仕事は、与えられた数とその約数の和との関係を表現することです。合計を見つけるには、1 から Number-1 までのすべての可能な整数を反復処理し (数値は合計に含まれないため)、指定された整数が入力数値の約数であるかどうかをテストする必要があります。整数が除数の場合、それを現在の合計に追加し、整数をインクリメントして、入力数値と同じ値を持つ整数に達するまでタスクを繰り返します。そこに到達したら、あとは合計を確認するだけです (合計が入力数値と等しい場合は完全な数値であり、そうでない場合はそうではありません)。以下に、必要な述語を示します。

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

どう考えているか教えてください。

于 2012-12-03T19:51:29.663 に答える