Как сделать вывод логической функции для вывода определенного оператора, когда логическое значение TRUE или FALSE в основном (c ++)? - PullRequest
2 голосов
/ 07 марта 2019

Проблема

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

bool checkPrime() {
for (x = 1; x <= i; ++x) {
    if (x % i != 0) {
        return 1;
    }
    else {
        return 0;
    }
}

Main

int main() {

cout << "Enter any positive number: " << endl;
cin >> n;

cout << "Prime Factors of " << n << " are: " << endl;
for (i = 1; i <= n; ++i) {
    if (n % i == 0) {
        for (x = 1; x <= i; ++x) {
                cout << i << "   ";
        }
}
cout << "\n";
system("pause");

}

Вопрос

Какмогу ли я реализовать свою функцию "checkPrime", чтобы проверить, запущен ли я:

cout << i << "   ";

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Я считаю, что проблема состоит в том, чтобы напечатать логическое возвращаемое значение функции checkPrime() как true или false. Я не собираюсь говорить о правильности функции checkPrime() в этом ответе. Но для вашей цели используйте что-то вроде следующего.

std::cout << std::boolalpha << checkPrime() << std::noboolalpha << std::endl;

См .: https://en.cppreference.com/w/cpp/io/manip/boolalpha

Я не смотрел на вас checkPrime() функцию, но в идеале она должна принимать n в качестве аргумента.

0 голосов
/ 07 марта 2019
  1. Измените checkPrime, чтобы принять ввод.
  2. Исправьте реализацию.Текущая реализация неверна.
  3. Добавьте вызов функции в main и выведите число на основе возвращаемого значения функции.

bool checkPrime(int i)
{
   // 1 and 2 are primes
   if ( i < 2 )
   {
      return true;
   }

   if ( i % 2 == 0 )
   {
      return false;
   }

   // Check with only odd numbers.
   // Division by even numbers is not necessary.
   // Even numbers greater than 2 are not prime numbers.
   // Also, you don't need to check for division by numbers greater than sqrt(i)

   for (x = 3; x*x <= i; x +=2 )
   {
      if ( i % x == 0)
      {
         return false;
      }
   }

   return true;
}

В main:

for (i = 1; i <= n; ++i)
{
   if (n % i == 0 )
   {
      if ( checkPrime(i) )
      {
         cout << i << "   ";
      }
   }
}

Вы можете объединить два оператора if в один оператор if.

for (i = 1; i <= n; ++i)
{
   if (n % i == 0 && checkPrime(i) )
   {
      cout << i << "   ";
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...