J'ai mis en œuvre Sieve of Eratosthenes pour résoudre le problème SPOJPRIME1. Bien que la sortie soit bonne, ma soumission dépasse la limite de temps. Comment puis-je réduire le temps d'exécution?Mon tamis de Eratosthenes prend trop de temps
int main()
{
vector<int> prime_list;
prime_list.push_back(2);
vector<int>::iterator c;
bool flag=true;
unsigned int m,n;
for(int i=3; i<=32000;i+=2)
{
flag=true;
float s = sqrt(static_cast<float>(i));
for(c=prime_list.begin();c<=prime_list.end();c++)
{
if(*c>s)
break;
if(i%(*c)==0)
{
flag=false;
break;
}
}
if(flag==true)
{
prime_list.push_back(i);
}
}
int t;
cin>>t;
for (int times = 0; times < t; times++)
{
cin>> m >> n;
if (t) cout << endl;
if (m < 2)
m=2;
unsigned int j;
vector<unsigned int> req_list;
for(j=m;j<=n;j++)
{
req_list.push_back(j);
}
vector<unsigned int>::iterator k;
flag=true;
int p=0;
for(j=m;j<=n;j++)
{
flag=true;
float s = sqrt(static_cast<float>(j));
for(c=prime_list.begin();c<=prime_list.end();c++)
{
if((*c)!=j)
{
if((*c)>s)
break;
if(j%(*c)==0)
{
flag=false;
break;
}
}
}
if(flag==false)
{
req_list.erase (req_list.begin()+p);
p--;
}
p++;
}
for(k=req_list.begin();k<req_list.end();k++)
{
cout<<*k;
cout<<endl;
}
}
}
La mise en forme et le retrait sont incohérents. Vos variables sont mal nommées, et il n'y a pas de commentaires. Je doute que beaucoup de gens prendront la peine d'analyser ce code. – abelenky
C'est un site de compétition, quand quelqu'un résout le problème pour vous allez-vous encore l'entrer dans la compétition? –
@abelenky désolé pour le code brut que j'ai mis en place .. gardera à l'esprit la partie de mise en forme à partir de la prochaine tym ..... toujours thanxX !! –