我實施了Sieve of Eratosthenes來解決SPOJ問題PRIME1。雖然輸出結果很好,但我的提交超過了時間限制。我怎樣才能縮短運行時間?Eratosthenes的我的篩子花費太長時間
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;
}
}
}
您的格式和縮進不一致。您的變量名稱很差,並且沒有評論。我懷疑很多人會費心分析這些代碼。 – abelenky 2010-10-05 21:59:01
這是一個競賽網站,當有人爲你解決問題時你還會參加比賽嗎? – 2010-10-05 22:30:20
@abelenky對不起,我把原始代碼..將記住從接下來的tym向上的格式化部分..通常thanxX !! – 2010-10-06 21:39:01