一、發文目的
本文主要闡述素數的概念,以通俗易懂的方式形象的描述素數和合數究竟代表什麼意思,以及找到一種方法能夠求得給定的數值範圍内的素數。
二、文章大綱
1,素數的概念
2,素數的形象的理解
3,什麼是合數
4,為什麼1不是素數
5,如何求給定範圍内的素數
6,一個Python求素數的例子
素數又稱質數,英文名稱是Prime number。
三、文章内容
1,素數的概念關于素數,也叫質數,從字面意思可以想象,這種數有着基本,本質,原子的意思,也就是說,這種數是不能夠再拆分的,是一個基本的,獨立的原子個體。素數的定義是指在除了1和此整數本身外,不能被其他自然數整除的數(1除外)。
2,素數的形象的理解可以想象,有一堆蘋果,n個。假設蘋果是不可切割的,現在需要你去給這堆蘋果等份分給若幹人。
有兩種可能的結果,一種是可以再分成若幹等份;一種是不能夠再分了,蘋果保存原樣的一堆。
針對第二種情況(保持原樣,不能再分),這堆蘋果可以看成下面兩種情形:
A,以單個蘋果為一個個體,可以分成n個人,1(個)*n(人)
B,以n個蘋果為一個整體,可以分給1個人,n(個)*1(人);
回到數的範疇,也就是說,如果一個整數n,隻能被1或者自己整除,也就是說整數n隻能表示為n=1*n,或者n=n*1的形式,即不能分成其他形式的等份了,那麼這個數就叫做素數。
形象的理解為:一堆蘋果,還是原來的那堆蘋果,沒有改變。
3,什麼是合數接着上面素數的概念,相反的情況,如果一堆蘋果可以再分成n=a*b的形式(a,b不等于1或者n),那麼就稱n為合數。合數這個詞,本身也代表了本身是可以由幾個數合在一起的意思。
也以蘋果為例,假設這堆蘋果是15個,除了本身15這種狀态之外,也可以分成3個一堆,共5堆(3*5)或者5個一堆,共3堆(5*3)這兩種狀态。即15不單單隻能表示為15*1或者1*15,還可以表示成3*5或者5*3。也就是說,15除了被1和自己整除外,還可以被3或者5整除。
4,為什麼1不是素數其實,如果從本質的概念來說,1也可以稱為素數,這個從上面的例子就可以看出。
之所以現在不能将1看成素數,原因在于,如果将1看成素數了,那麼會使得合數的概念不統一。
合數,從上面第3點的分析,可以知道,合數n可以表示為n=a*b的形式(這裡的a,b不等于1或者n)。
既然n=a*b,那麼a,b有兩種狀态,要麼是素數,要麼是合數。why?
因為,數本身就隻有這兩種狀态:要麼隻能被1或者本身整除,要麼除此之外還能被其他數整除。因此,a,b這兩個數可能是素數,可能是合數。
現在,我想對a,b做如下操作:如果是素數,則保持不變;如果是合數,那麼繼續分解為兩個數的乘積的形式。
這樣,一直持續操作下去,n=a*b,最終會以n=p1*p2*p3...的形式呈現(其中,p1,p2,p3...都是素數)。即一個合數,最終都會以素數的乘積表示。
現在回到本題的疑問,為什麼1不是素數?
因為:1由于本身的特殊性(任意個1相乘還是1),導緻一個合數n=p1*p2*p3,會有無數個表示式。即合數n,可以表示為:
n=p1*p2*p3
n=p1*p2*p3*1
n=p1*p2*p3*1*1
n=p1*p2*p3*1*1*1
......
所以,為了達到合數的表達式的唯一性,就人為的将1排除在了素數之外。
5,如何求給定範圍内的素數到這裡,已經知道了素數和合數。那麼如果想要求某個給定的數範圍内的素數有哪些,應該怎麼求。
比如,如何求10以内的素數?
根據常識,可以容易的想到10以内的素數有:2,3,5,7
如果不是10,而是100以内的素數呢?
難道是依次的去數,2,3,5,7,11,13,17,19...
如果不是100,而是1000以内的素數呢?
看來人為的靠自己的理解去數,會把自己數暈,不是解決問題的根本方法。
那麼應該怎麼去解決?
我認為,還是得從素數的概念入手:隻能被1和自己本身整除的數。
也就是說,除了1和本身,不能被其他數整除的數。或者說,隻要找到了一個能夠被1和本身之外的數整除,那麼就可以判定這個數就不是素數。
下面的目标,就是努力去找到這樣的數。
先想一下不是素數的數是什麼數?答案很明顯,就是合數。合數有什麼性質?合數可以表示為若幹個素數的乘積。
既然是要求n以内的素數,那麼肯定n以内的素數一定是在n以内;n以内的合數也是在n以内。n以内的合數可以表示為若幹個素數的乘積,這裡的素數也肯定是在n以内。
那麼可以确定的知道n以内的某個合數必會至少能夠被n以内的一個素數整除。如果能夠找到這樣的能夠被n以内的合數整除的最大的素數K,那麼就可以得到這樣一組素數集(從2開始,最大值是K),将n以内的整數,依次與這組素數中的素數進行求餘運算,根據求餘結果是否是0,來判斷整數是否是合數。即求餘的結果不是0的整數就是素數了。
下面的問題是:已知整數範圍n,如何求得能夠被n以内的合數整除的最大的素數?
還是從合數的概念出發,一個合數必然可以表示為若幹個素數的乘積。
至于合數分解成的素數的個數多少,這個就不确定了,可能是2個,也可能是3個,或者更多。
下面先給出一個結論:
假設一個合數M可以分解為3個素數的乘積,M=X1*X2*X3(X1<=X2<=X3),那麼對M進行開3次方根,得到的結果取整數為I,I必然介于M的素數的中間,即I>=X1且I<=X3。以整數I内的素數構成一個素數集合G,那麼G中必然存在素數X1;合數M越大,那麼得到的I就越大,因而構成的素數集合G中的最大的素數也越大。設想,要使得找到最大的素數,那麼必然要找到最大的I。在合數M最大的情況下,開方根次數越小,則此時找到的I才是最大的。那麼開方次數最小是多少呢?顯然就是開2次方根時(雖然開1次方根時,I最大,但此時的M就不是合數,而是素數了)。
那麼,現在知道了,如何求一個給定的整數範圍内的素數方法了:
根據上面讨論的方法,現在用Python實現一個程序來求給定的整數範圍内的素數。
Python實現的代碼(求給定整數範圍内的素數)
驗證結果:
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!