亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

素數檢測算法

系統 2117 0

前言

今天做ACM的時候,遇到了素數的檢測,檢測一個范圍內的素數的時候,如果用最簡單的那種方法,超時嚴重,因此學習了一個新的素數檢測算法——素數篩選法,這里也是跟大家分享一下

素數

素數的定義

一個大于1的整數,如果不能被除1和它本身之外的其它正整數整除,則是素數(又稱質數)

合數的定義

一個大于1的整數,如果不是素數則是合數。其中能整除這個數的正整數叫做約數,不等于1也不等于合數本身的約數叫做非平凡約數。

注意:

1既不是素數也不是合數

檢測素數

所謂素數檢測,就是給定任意一個大于1的整數,判斷這個整數是否為素數。

因子檢測法

方法:就是從2到n-1一個個的拿來嘗試,看能否整除n,如果存在能夠整數n的(找到一個因子),則n不是素數,否則認為n是素數。實際,是不需要試探到n-1的,只要的n的二次方根即可,原因是:
設n = a * b,且a、b均為n非平凡約數,顯然a > n的二次方根和b > n的二次方根不可能同時成立,因為同時成立時 a * b就會大于n,所以如果n存在非平凡約數,至少有一個小于等于n的二次方根,因此只要遍歷到n的二次方根即可。

因子檢測的實現代碼如下(c):

      int isPrime(int n)
{
	int i, flag;
	flag = (n <= 1)? 0 : 1;
	
	for(i = 2; i <= sqrt(n); i ++)
	{
		if(n % i == 0)
		{
			flag = 0;
			break;
		}
	}
	return flag;
}
    

測試結果:

時間復雜度:

很明顯,因子檢測算法的時間復雜度是0(n的二次方根),一般來說,這個時間復雜度已經很牛叉了,但是如果我要求n以內所有的素數集合,那時間復雜度瞬間就到了n * n的二次方根,這個對于n很大時是不可忍受的

素數篩選法

利用素數因子檢測法去超找n以內的所有素數,時間復雜度太高,不可忍受,因此這里介紹另外一種算法,素數篩選法,可以大大的節省時間,帶來的直接功效是九度acm關于素數檢測的題我瞬間ac,用素數因子檢測基本都是wa。

原理:

當i是素數的時候,則i的所有倍數必然是合數。如果i已經判斷不是素數了,那么找到i后面的質數來把這個質樹的倍數篩掉。

求20以內素數的篩選過程:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
第一步,因為所有的偶數和0,1必然不是質數,則將這些數的對應的value標記為flase,其余為true。
第二步:
i = 3,由于prime[3] = 1,則prime[6],prime[9],prime[12],prime[15],prime[18]均標記為0;
i = 4,由于prime[4] = 0,則continue,不做處理;
i = 5 > sqrt(20),算法結束

時間復雜度:

這個時間復雜度由于我的數學知識有限,也沒法把計算過程解釋出來,總之確實是很快,至于為什么i= 5就結束了,原因跟素數因子法里面的原理是一樣的,因為n的因子必然有一個是小于等于n的二次方根的。

素數篩選法實現代碼:

      void getPrimeArray(int *prime)
{
	int i, j;
	//初始化素數標識數組
	for(i = 0; i < max; i ++)
	{
		if((i == 2 || i % 2 != 0) && i != 1)
		{
			prime[i] = 1;
		} else
		{
			prime[i] = 0;
		}
	}
		
	//進行素數的篩選
	for(i = 2; i * i < max; i ++)
	{
		if(prime[i])
		{
			for(j = 2 * i; j < max; j += i)
			{
				prime[j] = 0;
			}
		}
	}

}
    

參考資料




素數檢測算法


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 草免费视频 | 亚洲欧美日韩国产综合久 | 欧美一级毛片一级 | 天天干天天操天天透 | 国产亚洲精品色一区 | 理论大片三在线观看 | 天天撸夜夜操 | 五月色婷婷琪琪综合伊人 | 狠狠久久亚洲欧美专区 | 精品成人免费一区二区在线播放 | 亚洲欧美日本国产综合在线 | 中国一级特黄aa毛片大片 | 欧美第一视频 | 天天干天天做 | 手机看片日韩国产 | 亚洲日韩成人 | jizz中国人 | 天天操夜夜欢 | 亚洲性事| 国产日韩久久久精品影院首页 | 成人综合久久综合 | 日本大片久久久高清免费看 | 久久久国产乱子伦精品 | 久久久久久久久毛片精品 | 亚洲欧洲尹人香蕉综合 | 国产乱码亚洲精品一区二区 | 亚洲片在线 | 88国产精品欧美一区二区三区 | 久久99精品九九九久久婷婷 | 91精品国产福利尤物免费 | 成人欧美一区二区三区黑人3p | 欧美精品视 | 一级毛片在线免费观看 | 国产精品88 | 狠狠色丁香久久婷婷综 | 日韩三级 | 欧美日韩亚洲无线码在线观看 | 香蕉网站狼人久久五月亭亭 | 国产在线综合网 | 色综合婷婷在线 | 男人深夜网站 |