在特定间隔中查找素数

时间:2013-11-20 19:09:26

标签: c++ primes

在特定数量的测试用例中查找特定时间间隔内的素数。

示例如下: 输入:

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

我做错了什么?

2 个答案:

答案 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]);

(外部循环可以为您提供额外的输出。)