[演算法]用兩種求質數的演算法(窮舉法,篩選法),C語言實現
阿新 • • 發佈:2019-02-08
今天考試的題目是記不得了,等題目公開了再給大家分析,今天講點經典的演算法,求質數,相信很多人還是記得當年的窮舉法了吧,就是不斷的讓每一個數除以一個小於他的數最大到sqrt(N),然後得出結果,演算法時間複雜度O(N^2),優化過的演算法O(N * sqrt(N)),經典的演算法我就不講了,初學者如果不懂的話,可以留言,或者跟我聯絡
程式碼如下:
下面是目前使用得比較多的求質數的方法,當然更加優越的演算法利用《費馬小定理》
可以得出質數的概率分佈實現接近線性的演算法複雜度的,今天不講,有興趣?那繼
續關注我吧,要是最近有時間的話,我會把程式碼放上來。
好了,今天的主角:篩選法求質數 ,原理就是從已經存在的陣列資料中篩選要的質
數,需要一個N大小的空間,N為所求質數的範圍,相比經典演算法比較浪費,不過效
率較高,O(N*LogN),適合大範圍求質數,但是空間浪費也是客觀的,
原理:從索引j=2,0,1,的情況排除了,開始篩除j的所有倍數,然後再篩j+1,直到
篩選到j=N,篩除完畢
具體演算法如下:
--------------------------------------------------------------------------------------
- 版權宣告:
- 如在本頁面內無特別說明,本文內容均為[李大仁部落格]原創,本文版權歸[李大仁部落格]所有。
- 歡迎轉載,轉載請務必在文章頁面明顯位置提供原文連結並註明出處。歡迎您在轉載本文時保留本段宣告。
- 文章標題:[演算法]兩種求質數的演算法(窮舉法,篩選法),C語言實現
- 獨立部落格:李大仁部落格
- 永久連結:http://www.lidaren.com/archives/244
--------------------------------------------------------------------------------------
以上內容由部落格自動釋出工具自動釋出,最終顯示內容和效果會與原文內容有所偏差,敬請諒解。
程式碼如下:
/*求質數的經典方法,窮舉法
*author CG
*2008 12 21
*時間複雜度O(N*sqrt(N))
*/
#include"stdio.h"
#include"math.h"
#define N 200/*定義測試資料*/
int main() {
int i , j;
for(i = 2 ; i < N i br>
for(j = 2 ; j < intsqrti jjsqrtibr>
if(i % j == 0){
break;
}/*if*/
}/*for*/
if(j > (int)sqrt(i)){/*符合條件?*/
printf("%-10d",i);/*輸出*/
}/*if*/
}/*for*/
return 0;
}/*main*/
下面是目前使用得比較多的求質數的方法,當然更加優越的演算法利用《費馬小定理》
可以得出質數的概率分佈實現接近線性的演算法複雜度的,今天不講,有興趣?那繼
續關注我吧,要是最近有時間的話,我會把程式碼放上來。
好了,今天的主角:篩選法求質數 ,原理就是從已經存在的陣列資料中篩選要的質
數,需要一個N大小的空間,N為所求質數的範圍,相比經典演算法比較浪費,不過效
率較高,O(N*LogN),適合大範圍求質數,但是空間浪費也是客觀的,
原理:從索引j=2,0,1,的情況排除了,開始篩除j的所有倍數,然後再篩j+1,直到
篩選到j=N,篩除完畢
具體演算法如下:
/*篩選法求質數
*author CG
*2008 12 21
*演算法複雜度O(N*LogN)
*/
#include "stdio.h"
#define N 200/*定義最大數*/
int main() {
double s , t;
int num[ N + 1 ] = {0};
int j = 2 ;/*定義起始數,從2開始*/
int i ;/*計數器*/
for(i=2 ; i
num[i] = i;/*待篩選陣列賦值,這步簡單但是非常重要*/
}
for(i = 2 ; i < N ibr>
j = 2;
while(j * i < N br>
num[j * i] = 0;
j++;
}/*while*/
}/*for*/
for(i = 2 ; i < N i br>
if(num[ i ] != 0)
printf("%-10d" , num[ i ]);
}/*for*/
return 0;
}/*main*/
--------------------------------------------------------------------------------------
- 版權宣告:
- 如在本頁面內無特別說明,本文內容均為[李大仁部落格]原創,本文版權歸[李大仁部落格]所有。
- 歡迎轉載,轉載請務必在文章頁面明顯位置提供原文連結並註明出處。歡迎您在轉載本文時保留本段宣告。
- 文章標題:[演算法]兩種求質數的演算法(窮舉法,篩選法),C語言實現
- 獨立部落格:李大仁部落格
- 永久連結:http://www.lidaren.com/archives/244
--------------------------------------------------------------------------------------
以上內容由部落格自動釋出工具自動釋出,最終顯示內容和效果會與原文內容有所偏差,敬請諒解。