Найдите простые числа в определенном интервале в определенном количестве тестовых случаев.
Пример ниже: Вход:
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
Что я делаю не так?
Поскольку никто еще не указал на это, если вам интересно, почему вы получаете три набора выходных данных вместо двух...
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]);
(Внешняя петля - это то, что дает вам дополнительный выход.)
Вы должны переместить prime = true
вне цикла for. Вы в настоящее время перезагружаете его на каждой итерации. Что касается печати, вам не нужно, чтобы << endl
при печати каждой строки. Вам нужно только пространство.