快速查詢質數

2022-03-11 22:55:25 字數 1322 閱讀 1597

普通演算法:

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...