普通演算法:
void findzhishu()
}if(flag==1)//條件為真時表示i是質數
}printf("\n");
printf("===count:%d \n",num);
printf("===used:%fs===",(float)(clock()-bt)/clocks_per_sec);
printf("\n");
}
高效率演算法**載)
int sieve()
for (i=4; i<=mplen; i+=5)
magicpattern[i] = 0;
for (i=6; i<=mplen; i+=7)
magicpattern[i] = 0;
for (i=10; i<=mplen; i+=11)
magicpattern[i] = 0;
for (i=12; i<=mplen; i+=13)
magicpattern[i] = 0;
// 新的初始化方法,將2,3,5,7,11,13的倍數全乾掉
// 而且採用memcpy以mplen長的magicpattern來批量處理
int remainder = n%mplen;
char* p = flag+1;
char* pstop = p+n-remainder;
while (p < pstop)
if (remainder > 0)
flag[2] = 1;
flag[3] = 1;
flag[5] = 1;
flag[7] = 1;
flag[11] = 1;
flag[13] = 1;
// 從17開始filter,因為2,3,5,7,11,13的倍數早被kill了
// 到n/13止的,哈哈,少了好多吧
int stop = n/13;
for (i=17; i <= stop; i++)
}// 統計素數個數
for (i=2; i<=n; i++)
}// 因輸出費時,且和演算法核心相關不大,故略
// 釋放記憶體,別忘了傳說中的記憶體洩漏
free(flag);
printf("===count:%d",count);
printf("===used:%f",(float)(clock()-bt)/clocks_per_sec);
return count;
}
演算法 快速查詢質數
其實,找乙個質數,很簡單啊,就是全部遍歷一次嘛,但是!我們這裡講一下,快速求解的辦法好吧!對於給定的乙個數,求解這個數內的所有質數!首先,對於乙個數n,只要它根號n內的數,不能整除它,那麼它就肯定是zh質數,因為這個是乘法交換律,ab ba,哈哈哈 然後呢,我們對於n個數內,我們可以直接pai 排除...
快速查詢演算法
在日常的演算法中,查詢是乙個經常涉及到的話題,而如何提高查詢的速度,也是很多程式設計師 軟體研究的話題。先看乙個例子。有這樣乙個資料型別s 學生姓名 name 性別 年齡 age 現在假設有這樣乙個需求 檔案a b中分別存放大量s 的記錄,需要將a b中重複的記錄去掉。我們用c 來演示今天的話題 t...
快速查詢素數
題目 時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 現在給你乙個正整數n,要你快速的找出在2.n這些數裡面所有的素數。輸入給出乙個正整數數n n 2000000 但n為0時結束程式。測試資料不超過100組 輸出將2 n範圍內所有的素數輸出。兩個數之間用空格隔開 樣例輸入 5...