Вывод количества простых чисел из пользовательского диапазона ввода - PullRequest
0 голосов
/ 26 февраля 2019

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

Напишите программу на C ++, чтобы спросить пользователя и введите начальное и конечное значение для диапазона целых чисел.Подсчитайте и выведите количество простых чисел в этом диапазоне (включая конечные точки).Например, если пользователь вводит 2 и 10, выход должен быть: «В данном диапазоне есть 4 простых числа».Не выводите сами простые числа в окончательном представлении.НЕ используйте оператор break в вашем коде.

Скопируйте и вставьте вывод внизу кода в качестве комментария.Запишите свое имя в выходной.Никакая другая функция, кроме main (), не требуется.

Тестовые данные: от 50 до 100.

Я искал потенциальные решения онлайн, но все еще не могу обернуть головуКак написать эту программу с ограничениями.Вот ограничения:

  • Я не могу использовать оператор break
  • Я не могу использовать функцию

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

Я изменил код в сети, чтобы соответствовать приглашению, но он использует разрыв:

#include <iostream>

using namespace std;

int main () 
{
    int min, max, i, primeNumbers;

    cout << "Enter a minimum integer: " ;
    cin >> min;
    cout << "Enter a maximum integer: " ;
    cin >> max;

    primeNumbers = 0;
    for (i=min; i <= max; i++) 
        for (int j=2; j<i; j++)
        {
            if (i % j == 0) 
                break;
            else if (i == j+1){
                primeNumbers++;
            }

        }   

    cout << "There are " << primeNumbers << " prime numbers" << endl;
    return 0;
}

Вывод:

Enter a minimum integer: 50
Enter a maximum integer: 100
There are 10 prime numbers

1 Ответ

0 голосов
/ 26 февраля 2019

Используйте флаг, чтобы отслеживать, были ли найдены какие-либо факторы.

for (i=min; i <= max; i++)
{
    bool hasFactor = false;

    for (int j=2; j<i; j++)
    {
        if (i % j == 0) 
            hasFactor = true;

        if (i == j+1 && !hasFactor)
            primeNumbers++;
    }
}

Затем вы можете переместить второй if за пределы внутреннего цикла.

for (i=min; i <= max; i++)
{
    bool hasFactor = false;

    for (int j=2; j<i; j++)
    {
        if (i % j == 0) 
            hasFactor = true;
    }

    if (!hasFactor)
        primeNumbers++;
}

Вы также можете оптимизировать его, остановив внутренний цикл сразу после установки hasFactor, имитируя оператор break без его фактического использования.

for (i=min; i <= max; i++)
{
    bool hasFactor = false;

    for (int j=2; j<i && !hasFactor; j++)
    {
        if (i % j == 0) 
            hasFactor = true;
    }

    if (!hasFactor)
        primeNumbers++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...