Как мне ограничить количество номеров в строке? - PullRequest
0 голосов
/ 15 марта 2019

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

#include <iostream>
enter code here

int main()
{
    int low, high, i, flag, j;
    cout << "Enter two numbers(intervals): ";
    cin >> low >> high;
    cout << "Prime numbers between " << low << " and " << high << " are: ";
    while (low < high)
    {
        flag = 0;
        for (i = 2, j = 1; i <=low/2; +ii, ++j)
        {
            if (j == 8)
            {
                cout << "\n";
                j = j - 7;
            }
            else if (low % i == 0)
                {
                    flag = 1;
                    break;
                }
            }
        if (flag == 0)
            cout << low << " ";
            ++low;
    }
return 0;
}

Это работает для первой строки, тогда все остальное, кажется, начинает перечислять, а не находится в строке.

Output: Enter two numbers(intervals): 1
200
Prime numbers between 1 and 200 are: 1 2 3 5 7 11 13 17
19
23
29
31 ...

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

Уже немного поздно, но я сказал, что сделаю это.Мои предложения:

#include <iostream>
//enter code here
using std::cin;
using std::cout;

int main()
{
    int low, high, count, i;
    bool flag; // bools are more suited to being flags
    cout << "Enter two numbers(intervals): ";
    cin >> low >> high;
    cout << "Prime numbers between " << low << " and " << high << " are: ";
    count = 1; // I replaced j with this for ease of reading
    while (low < high)
    {

        flag = true;
        // using break in loops is not recommended, and you already have a flag
        for (i = 2; i <= low / 2 && flag; ++i)
        {
            if (low % i == 0)
            {
                flag = false;
            }
        }
        if (flag)
        {
            cout << low;
            if (count == 8)
            {
                cout << std::endl;
                count = 1;
            }
            else
            {
                cout << " ";
                ++count;
            }
        }
        ++low;
    }
    return 0;
}
0 голосов
/ 15 марта 2019

Ваш код делит не каждые 8 ​​простых чисел, а каждые 8 ​​попыток деления числа во время поиска простого числа. Таким образом, любое простое число, которое на 8 или более значений отличается от предыдущего, приведет к разрыву строки. Рассмотрим следующее исправление:

#include <iostream>
using namespace std;

int main()
{
    int low, high, i, flag, j;
    cout << "Enter two numbers(intervals): ";
    cin >> low >> high;
    cout << "Prime numbers between " << low << " and " << high << " are: ";
    j = 0;
    while (low < high)
    {
        flag = 0;
        for (i = 2; i <=low/2; ++i)
        {
            // Removed here
            if (low % i == 0)
            {
                flag = 1;
                break;
            }
        }
        if (flag == 0)
        {
            ++j; // Added here
            cout << low << " ";
        }
        if (j == 8) // and here
        {
            cout << "\n";
            j = j - 8;
        }
        ++low;
    }
    return 0;
}

Кстати, вы должны заканчивать поиск, когда достигаете квадратного корня из low, а не low / 2. Цикл будет намного быстрее.

...