Цикл C ++ каждый не простой

Я пытаюсь сделать это:

  1. Пользователь выбирает один номер
  2. Программа вызывает isaPrime() функция, поэтому мы видим, является ли число простым или нет.

Я хотел сделать цикл, поэтому каждый раз, когда число не является простым, пользователь должен выбрать новое значение.

Вот код:

#include <iostream>
#include <math.h>

using namespace std;

bool isPrime (int num)
{
if (num <=1)
return false;
else if (num == 2)
return true;
else if (num % 2 == 0)
return false;
else
{
bool prime = true;
int divisor = 3;
double num_d = static_cast<double>(num);
int upperLimit = static_cast<int>(sqrt(num_d) +1);

while (divisor <= upperLimit)
{
if (num % divisor == 0)
prime = false;
divisor +=2;
}
return prime;
}
}

int main()
{
int p;
do {
cout << "p : ";
cin >> p;
isPrime(p);
} while (isPrime(p));

}

-1

Решение

Это должно обрабатывать ваш пользовательский цикл ввода / вывода. Вам просто нужно заменить isPrime функционировать с вашей собственной реализацией.

Листинг кода


#include <iostream>
#include <iomanip>
#define isPrime(x) (1)

int main(void)
{
using namespace std;

const int maxchar = 5;
string nationname;
int input;
int running = 1;

while ( running )
{
cout << "Enter a number:";
cin >> input;
if ( isPrime(input ) )
{
// Do something
running = 0;
}
else
{
cout << "Not a prime number. Please try again!" << endl;
}
}

return 0;
}
2

Другие решения

Если вы удалите цикл do, ваш код будет работать. Это связано с тем, что ваш цикл будет работать до тех пор, пока isprime возвращает true, и останавливается, когда isprime возвращает false.

Также, если вы хотите показать, является ли число простым, вы должны использовать cout << isPrime(p);

Таким образом, ваша основная функция должна выглядеть

int main()
{
int p;
cout << "p : ";
cin >> p;
cout << isPrime(p);
}
0

По вашему вопросу: когда пользователь выбирает не простое число, цикл повторяется. То, что вы делаете, наоборот, просто замените

else{
bool prime =false   //replaced to true
//your code
while (divisor <= upperLimit)
{
if (num % divisor == 0)
{
prime = true;   //replaced to true
break;
}
divisor +=2;
}
return prime;
0
По вопросам рекламы [email protected]