2016-05-25 3 views
0

Я понимаю, что я могу просто использовать for-loop для определения простого числа, но перед тем, как реализовать цикл в эту тему, у меня возникла мысль, что я, возможно, смогу сделать это с циклом while или do-while. Каким-то образом мой цикл do-while кажется неправильным.C++ do while not looping

Моя теория заключалась в том, что я мог найти простое число для проверки остатка делителя, когда делитель продолжает уменьшаться на 1, пока делитель не достигнет 1. (Хотя «до тех пор, пока делитель не достигнет 1.», часть не находится в коде, я бы предположил, что остаток 0 должно появиться в любом случае до того, как дивизор опустится ниже 0.)

Однако он продолжает останавливаться до того, как остаток достигнет 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

Второе условие подразумевается первым. Если 'остаток' меньше 1, это явно не 1 – user4581301

+1

Я думаю, что вам нужно условие' while (divisor> 1 && остаток! = 0) ' – Barmar

ответ

2

Во-первых, у вас есть опечатка в назначении переменной. Эта линия:

number = divisor - 1; 

должно быть:

divisor = number - 1; 

Условие while() должно быть while (remainder != 0), так что цикл продолжает повторяться до тех пор, пока вы не нашли делитель. Если вы хотите быть более явным, вы можете использовать while (divisor > 1 && remainder != 0). Не нужно повторять, когда divisor == 1, потому что это делитель всех целых чисел.

+0

Я что-то упустил? Я имею в виду, на мой вопрос ответил, но я до сих пор этого не понимаю. в моей части дела, делитель продолжает уменьшаться на 1, а остаток достигнет 0, если цикл продолжится. Я думал, что while (divisor> 1 && остаток! = 0) немедленно остановит цикл, поскольку делитель больше 1, а остаток не может быть 0 сразу после того, как он выполняется один раз. – Minjae

+0

В конце концов 'divisor' станет' 1'. Каждое целое число делится на 1, поэтому 'остаток 'будет' 0', когда это произойдет, и цикл остановится. – Barmar

+0

так что в моей голове 'while (divisor> = 1 && остаток == 0)' звучит правильно, но это как-то останавливает цикл. – Minjae