鏈接的問題 - https://www.hackerrank.com/contests/freshers-challenge-2/challenges/counting-the-steps如何更快地創建以下C++程序?
的問題如下 - (包括A和B,在情況下,他們都是素)找到A和B之間的素數的數量
我用的篩子Eratosthenes解決了這個問題,但是我在兩個測試用例中超時。
特別是對於一個測試用例,其中有10,000個數字,我的C++程序在CodeBLocks中花費了大約10秒。我在下面插入代碼段 -
for(int i=2;i<=upperbound;i++)
{
prime[i-2]=i;
}
int sq=sqrt(upperbound);
for(int i=0;prime[i]<=sq;i++)
{
if(prime[i]!=0)
{
int j=i+prime[i];
for(;j<m;j+=prime[i])
{
prime[j]=0;
}
}
}
這是篩網的代碼片段。我的輸出都是正確的,但我怎樣才能讓這個程序更快。
編輯:段故障被解決了平
你正在計算'sqrt'(可能很貴),並沒有真正使用它。 – TZHX 2015-03-31 12:16:40
幾件事情:你定義'sq',但似乎沒有使用它;你使用'm'但是不要定義它(在你所包含的代碼片段中)。另外,如果其中一個測試案例導致seg-fault,則輸出不能「全部正確」。您應該可能會顯示更多的代碼和導致問題的測試用例。 – TripeHound 2015-03-31 12:17:01
這看起來不像Eratosthenes的篩子給我。看看在這裏的僞代碼:http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes#Implementation – NathanOliver 2015-03-31 12:18:44