Я пытаюсь сделать это:
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));
}
Это должно обрабатывать ваш пользовательский цикл ввода / вывода. Вам просто нужно заменить 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;
}
Если вы удалите цикл do, ваш код будет работать. Это связано с тем, что ваш цикл будет работать до тех пор, пока isprime возвращает true, и останавливается, когда isprime возвращает false.
Также, если вы хотите показать, является ли число простым, вы должны использовать cout << isPrime(p);
Таким образом, ваша основная функция должна выглядеть
int main()
{
int p;
cout << "p : ";
cin >> p;
cout << isPrime(p);
}
По вашему вопросу: когда пользователь выбирает не простое число, цикл повторяется. То, что вы делаете, наоборот, просто замените
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;