2013-11-20 34 views
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 

我在做什麼錯?

+0

使用[偏移Eratothenes篩](http://stackoverflow.com/a/19641049/849891)。 C代碼[這裏](http://stackoverflow.com/a/9557173/849891)。 –

回答

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

(外環是什麼給你額外的輸出。)

+0

有人在乎解釋downvote? – cbmanica

1

您應該將prime = true移到for循環之外。您目前正在每次迭代重置它。就印刷而言,當您打印每一行時,您並不需要<< endl。你只需要一個空間。

+0

我在第一個for()循環中移動它,它似乎解決了質數的問題,但它仍然執行3次出於某種原因,第一個時間間隔計算兩次,任何原因? – user3002211