2014-01-18 3 views
-3

Итак, я сделал эту небольшую программу. Он дает все правильные выходы, но при загрузке его в онлайн-судью он меня отбрасывает Time Limited Exceeded. Любые идеи о том, как сделать его более эффективным?Сколько простых чисел между заданным диапазоном? C++

Вот мой код.

int const MAX = 1000001; 
#include<iostream> 
#include<string> 
#include<cmath> 

using namespace std; 

int main() 
{ 
    int count = 0, array[MAX], a, b, pi = 0; 
    bool end = false; 

for(int i = 1; i <= MAX; i++) 
{ 
    count = 0; 
    for(int j = 2; j <= sqrt(i); j++) 
    { 
     if(i % j == 0) 
     { 
      array[i]=0; 
      count++; 
      break; 
     } 
    } 
    if(count == 0 && i != 1){ 
     array[i]=1; 
    } 
} 

do { 
    cin >> a >> b; 
    pi = 0; 
    if ((a == 0) && (b == 0)) { 
     end = true; 
     break; 
    } 
    else { 
     for (int i = a; i <= b; i++) { 
      if (array[i] == 1) { 
       pi ++; 
      } 
     } 
     cout << pi << endl; 
    } 
} while (end == false); 
cout << endl; 

return 0; 
} 
+2

Пытается представить себе, насколько эффективно вызывать 'sqrt()' на каждом шаге цикла. или если у компилятора есть мозги, почему вы используете 'int' для информации, которая может храниться в' bool'. Наконец, я не вижу кода для поэтапного. Вы знакомы с [Сито Эратосфена] (http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes)? – WhozCraig

+0

Влияет ли эта программа на ввод? Почему бы просто не напечатать фиксированный список штрихов с Интернета? – phs

+0

@phs Я не пытаюсь напечатать список простых чисел, но определите, сколько из них находится в заданном диапазоне. – randomUser

ответ

Смежные вопросы