生活随笔
收集整理的這篇文章主要介紹了
利用素数表快速寻找 n 以内的所有素数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://blog.csdn.net/wxyztuv/article/details/7965556
三個函數,find_prime() 是利用素數表的方法,尋找素數的,find_prime_stupid()是利用另一種傳統方法尋找素數的,test_func()用于測試兩個函數的速度
測試數據分別是 1000,5000,10000,50000,100000,500000,1000000,2000000,5000000 以內的素數。
[cpp]?view plaincopy
#include?<stdio.h>?? #include?<stdlib.h>?? #include?<windows.h>?? #include?<math.h>?? #include?<time.h>?? ?? #define?SIZE?10000000?? ?? void?find_prime(int?n);?? void?find_prime_stupid(int?n);?? int?test_func(void);?? ?? ?? int?prime[SIZE]?=?{0};?? int?prime_index?=?0;?????????? ?? ?? int?main(int?argc,char?**argv)?? {?? ????test_func();?? ????return?0;?? }?? ?? ?? ?? int?test_func(void)?? {?? ????time_t?start_time,end_time;?? ????int?test_data[]?=?{1000,5000,10000,50000,100000,500000,1000000,2000000,5000000,0};?? ????int?i_testdata?=?0;?? ?????? ????printf("\n\nstart?testing...\n\n");?? ?? ?????? ????printf("find_prime():\n");?? ????while(test_data[i_testdata])?? ????{?? ????????printf("%d\t\t",test_data[i_testdata]);?? ????????time(&start_time);?? ?? ????????find_prime(test_data[i_testdata]);?? ?? ????????time(&end_time);?? ????????printf("%ds\n",end_time?-?start_time);?? ????????++i_testdata;?? ?? ????}?? ?? ?????? ????printf("\n\n");?? ????i_testdata?=?0;?? ????printf("find_prime_stupid():\n");?? ????while(test_data[i_testdata])?? ????{?? ????????printf("%d\t\t",test_data[i_testdata]);?? ????????time(&start_time);?? ?? ????????find_prime_stupid(test_data[i_testdata]);?? ?? ????????time(&end_time);?? ????????printf("%ds\n",end_time?-?start_time);?? ????????++i_testdata;?? ????}?? ?? ?? ????return?0;?? }?? ?????????? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? void?find_prime(int?n)?? {?? ????for(int?i?=?2;?i?<=?n;?++i)?? ????{?? ????????int?j?=?0;?? ?????????? ????????while(prime[j]?&&?i?%?prime[j]?!=?0?&&?prime[j]?<=?sqrt(i))?? ????????{?? ????????????++j;?? ????????}?? ?????????? ????????if(!prime[j]?||?i?%?prime[j]?!=?0)?? ????????{?? ????????????prime[prime_index++]?=?i;?? ????????????? ????????}?? ????}?? }?? ?????? ?? void?find_prime_stupid(int?n)?? {?? ????int?is_prime?=?1;?? ????for(int?i?=?2;?i?<=?n;?++i)?? ????{?? ????????for(int?j?=?2;?j?<=?sqrt(i);?++j)?? ????????{?? ????????????if(i?%?j?==?0)?? ????????????{?? ????????????????is_prime?=?0;?? ????????????}?? ????????}?? ?????????? ????????if(is_prime)?? ????????{?? ???????????? ????????}?? ????????else?? ????????{?? ????????????is_prime?=?1;?? ????????}?? ????}?? } ?
總結
以上是生活随笔為你收集整理的利用素数表快速寻找 n 以内的所有素数的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。