Нахождение простых чисел в определенном интервале

0

Найдите простые числа в определенном интервале в определенном количестве тестовых случаев.

Пример ниже: Вход:

2
1 10
3 5

Вывод:

2
3
5
7

3
5

Обратите внимание на небольшое пространство между ответом.

здесь мой код:

#include <iostream>
#include <cmath>

void prime (int x, int y);

using namespace std;

int main()
{
    int t, x[10], y[10];
    cin >> t;

    for (int i = 0; i < t; i++)
        //for (int j = 0; j < t; j++)
        cin >> x[i] >> y[i];

    while (t > 0){
        for (int i = 0; i < t; i++)
            prime(x[i], y[i]);
        t--;
    }
}

void prime(int x, int y){
    bool prime = true;
    for (int i = x; i <= y; i++){
        for (int j = 2; j <= sqrt(i); j++){
            prime = true;
            if (i % j == 0)
                prime = false;
        }
        if (prime == true)
            cout << i << endl;
    }
    cout << endl;
}

Здесь вывод я получаю, когда я использую один и тот же ввод.

1
2
3
5
7
10

3
5

1
2
3
5
7
10

Что я делаю не так?

Теги:
primes

2 ответа

-2
Лучший ответ

Поскольку никто еще не указал на это, если вам интересно, почему вы получаете три набора выходных данных вместо двух...

while (t > 0){
  for (int i = 0; i < t; i++)
    prime(x[i], y[i]);
  t--;
}

может быть лучше сформулировано как

for (int i = 0; i < t; i++)
  prime(x[i], y[i]);

(Внешняя петля - это то, что дает вам дополнительный выход.)

  • 0
    Кто-то хочет объяснить понижение голосов?
1

Вы должны переместить prime = true вне цикла for. Вы в настоящее время перезагружаете его на каждой итерации. Что касается печати, вам не нужно, чтобы << endl при печати каждой строки. Вам нужно только пространство.

  • 0
    Я переместил его в первый цикл for (), и, похоже, он решает проблему с простыми числами, но он по-прежнему выполняется 3 раза по какой-то причине, первый интервал вычисляется дважды, какая-то причина для этого?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню