質問
だから見直します。でのみ表示0sとしての温度範囲お願い致します。
// A program to determine whether the input number is a perfect number
// A perfect number is defined by the sum of all its positive divisors excluding itself
// 28: 1+2+3+7+14 = 28.
int perfect, limit, divisor;
cout << "Please enter a positive integer in order to define whether it is a perfect integer or not: " ;
cin >> perfect;
cout << endl;
int temp = 0;
int prevtemp = 0;
limit = 1;
divisor = 1;
while (limit < perfect)
{
if ((perfect % divisor) == 0)
{
divisor = prevtemp;
temp = prevtemp + temp;
}
limit++;
divisor++;
}
if (perfect == temp)
cout << "Your number is a perfect number!" << endl;
else
cout << "Your number is not a perfect number" << endl;
return 0;
解決
んがいらっしゃるかと思いるコード:
if ((perfect % divisor) == 0)
divisor = prevtemp;
ることを理解しています prevtemp=divisor
です。ことは明らかに問題せられているが、依然として非常に少ないように行なっているのでしょう。例えば、いくられました limit
目的達成の初期化で増やすいものと見えな 使用 その価値もないといけないと思い、使用すると、その値は常に同じ divisor
主なくなったのはなぜだとお考えで必要とされることに、どのように limit
この意しています。
編集:ことができるとされていることを意してい limit
.特に、要因が常にペアー:その場合には、以下の平方根の数が、一致する最初のことになるも以上にルートの多くの注目を集めています。などをする必要がなくなり、より快適なスキャンの件数そのものの見を与える要因の設定ができますの平方根の上下限とし、スキャンのみです。各要因だが、マッチング因子が perfect/divisor
.以来、すでにみんないいねんどしちょうそんみんばんざいもくんの宿題、例として:
bool is_perfect(int number) {
int limit = sqrt((double)number);
int sum = 1;
for (int i=2; i<=limit; i++)
if (number % i == 0)
sum += i + number/i;
return sum == number;
}
他のヒント
あなたはそうprevtemp
にそれを追加することは何もしない、0以外にtemp
を設定されることはありません。
私はあなたが言うことを意味と考えています。
if ((perfect % divisor) == 0)
temp += divisor; // not "divisor = prevtemp;"
行「TEMP = prevtemp + TEMP」は、この溶液を用いて除去されなければなりません。 prevtemp
変数の必要性はもはや存在します。
また、別のlimit
とdivisor
変数を維持する必要は、ありません。ただ、limit
を削除し、divisor
を使用するために、ループ条件を変更してください。
また、マーク・バイヤーズとしてあなたがfor
ループではなく、while
にそれをリファクタリング場合はループを理解する方が簡単だろう、指摘しています。
それはそうです。ここではあなたがそれを行うことができ方法は次のとおりです。
int total = 0;
for (int i = 1; i < perfect; ++i)
{
if (perfect % i == 0)
total += i;
}
if (perfect == total)
cout << "Your number is a perfect number!" << endl;
else
cout << "Your number is not a perfect number" << endl;
実行中の合計を変数と呼ばれるtotal
に保管されていることに注意してください(あなたはこの変数tempと呼ばれる)、数が正確な除数であるときにのみ増加されます。
あなたはそれがprevtemp
する初期化した後0
ために何を割り当てることはありませんので、temp
を読み込む行にtemp = prevtemp + temp
に追加するものは何もありません。
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
int n,i=1,sum=0;
cout<<"Enter a number: ";
cin >> n;
while(i<n){
if(n%i==0)
sum=sum+i;
i++;
}
if(sum==n)
cout << i << " is a perfect number";
else
cout << i << " is not a perfect number";
system("pause");
return 0;
}