在特定数量的测试用例中查找特定时间间隔内的素数。
示例如下: 输入:
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
我做错了什么?
答案 0 :(得分:1)
您应该将prime = true
移到for循环之外。您目前正在每次迭代时重置它。就打印而言,打印每一行时不需要<< endl
。你只需要一个空间。
答案 1 :(得分:-1)
由于没有人指出它,如果你想知道为什么你得到三组输出而不是两组......
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]);
(外部循环可以为您提供额外的输出。)