2016-05-25 7 views
0

forループを使用して素数を定義することはできますが、そのトピックにループを実装する前に、whileループまたはdo-whileを使用してループを作成できるとの考えがありました。 何とかdo-whileループが正しく動作していないようです。C++ do not while looping

私の理論は、除数が1になるまで除数が1ずつ減少していく除数の残りの部分を調べるための素数を見つけることができたということでした。(除数が1に達するまでは '部分はコードに含まれませんが、

ただし、残量が0になる前に停止します。 どうしたのですか? 私はまだ(remainder<1 && remainder!=1)の代わりに両方を試したことがありますが、運はまだありません。

while (remainder<1) 
while (remainder==1) 

#include <iostream> 
using namespace std; 
int main() 
{ 
    int number, divisor, remainder; 
    cin >> number; 
    divisor=number-1; 
    cout << "You've put " << number << ".\n"; 
    do { 
     divisor = divisor - 1; 
     remainder=number%divisor; 
    } 
    while (remainder<1 && remainder!=1); 
    cout << divisor << " " << remainder << " " << number << " " << "Divisor, remainder, number\n"; 
    return 0; 
} 
+1

私はこれが後方にあると思います。 'number = divisor-1'は' divisor = number-1'でなければなりません。 – Barmar

+0

第2の条件は、第1の条件によって暗示される。 'remainder'が1より小さい場合、それは明らかに1ではありません。 – user4581301

+1

私はあなたが望む条件は' while(除数> 1 && remainder!= 0) ' – Barmar

答えて

2

まず、変数の割り当てに入力ミスがあります。このライン:

number = divisor - 1; 

は次のようになります。

divisor = number - 1; 

ループは限り、あなたは除数を発見していないと繰り返し続けるようにwhile()条件は、while (remainder != 0)する必要があります。より明示的にしたい場合は、while (divisor > 1 && remainder != 0)を使用できます。 divisor == 1を繰り返す必要はありません。すべての整数の約数なのでです。

+0

何か不足していますか?私の質問は完全に答えられますが、私はまだそれを得ていません。私のdo部では、除数は1だけ減少し続け、ループが継続すると残りは0になります。 while(divisor> 1 && remainder!= 0)は、除数が1より大きく、doが1回実行された直後にremainderを0にすることができないので、ループを直ちに停止すると考えました。 – Minjae

+0

最終的に 'divisor'は' 1'になります。すべての整数は1で割り切れるので、 'remainder'はそれが起こったとき' 0'になり、ループは停止します。 – Barmar

+0

私の頭では 'while(除数> = 1 && remainder == 0)'と聞こえますが、これは何とかループを止めます。 – Minjae