1樓:花開勿敗的雨季
根據質數的定義,在判斷一個數n是否是質數時,只要用1至n-1去除n,看看能否整除即可。
還有更好的辦法:先找一個數m,使m的平方大於n,再用小於等於m的質數去除n(n為被除數),如果都不能整除,則n必然是質數。如我們要判斷1993是不是質數,50*50>1993,那麼只要用1993除以<50的質數看是否能整除,若不能即為質數。
100以內的質數有25個,還是比較好記的,只要記熟100以內質數,就可以快速判斷10000以內的數是不是質數。
100以內的質數有2、3、5、7、11、13、17、19、23、29、31、37、41、43、47、53、59、61、67、71、73、79、83、89、97,在100內共有25個質數。
只有1和它本身兩個因數的自然數,叫質數(或稱素數)。(如:由2÷1=2,2÷2=1,可知2的因數只有1和它本身2這兩個約數,所以2就是質數。
與之相對立的是合數:「除了1和它本身兩個因數外,還有其它因數的數,叫合數。」如:
4÷1=4,4÷2=2,4÷4=1,很顯然,4的因數除了1和它本身4這兩個因數以外,還有因數2,所以4是合數。)
2樓:放飛夢想啦啦
最暴力的解法
利用質數的性質:設i為質數,則i只能被 1 和 i整除。
因此對於i,我們可以令 2..i-1 依次除以i,如果均不能被整除,則說明是質數。
**如下
private static boolean isprime1(int nr)
return true;
}123456123456
稍微暴力的方法
同樣利用其性質,但我們可以注意到,當 x > i / 2 時,則 x 肯定不能被 i 整除。
對於i,我們可以令 2..x 依次除以i,其中x為sqrt(i)
**如下
private static boolean isprime2(int nr)
return true;
}123456123456
效率更高的演算法
提供一個陣列 nums =
我們知道 nums[0] 為質數,將nums中所有能被nums[0]整除的數移除,此時陣列為 nus =
接著將所有能被 3 整除的數移除。此時為 nums =
接下來的數是 5,因為 5*5 > 17,所以移除過程結束。此時的nums值為輸入nums中的所有素數。
上面的步驟之所以正確是因為:合數必定可以由質數相乘得到,則對任意質數i,如果其不能被sqrt(i)前的所有質數整除,則其必定為質數(小於 sqrt(i) 的合數必定可以被小於 sqrt(i) 的質數合成)。
**如下
private static void primelist(listnums)
} else
}}12345678910111234567891011
此演算法存在的問題也很明顯,說它是判斷一個數是否是質數獲取不太準確,其作用應該是 「列印出小於等於某值的所有質數」
使用素數表
上面的演算法有一個缺陷,它對輸入陣列要求較高,要求包含了陣列最大值之前的所有素數,且是已排序的。也就是說它不能用來直接判斷一個數是否是素數。
通常情況下,我們會使用一個素數表。接著用來整除的元素便可以從這個素數表中獲取
這種演算法的侷限在於素數表是有限的,對於超出素數表最大值平方的數則需要加上上述方法二的步驟才能判斷(儘管這種情況不多)。
演算法實現同上,只是此時直接從素數表獲取素數即可
3樓:
你新建一個test類 把下面這些拷進去就是了哈public class test
}/**
* 判斷一個數是否是質數的方法
* @param num
* @return
*/public static boolean judgenum(long num)
return flag;//沒有就是了} }
4樓:彩紅貝貝哈
慈母手中線,遊子身上衣.
5樓:匿名使用者
除了1和這個數本身相乘能得這個數以外,沒有其他兩個整數相乘能等於這個數
比如2,只能寫成1乘2,就是質數
像4,能分成 1乘4 和 2乘2 ,這種就不是質數
6樓:
素數就是質數 就是除了1和它本身以外不能被任何數整除的數 比如 2,3,5,7,11等等
7樓:么么_軒軒
除了1和本身沒有其它的約數,就是質數
怎樣判斷一個數是不是質數?
8樓:暴走少女
1、查表法:
主要是指查「質數表」。編制質數表的過程是:按照自然數列,第一個數1不是質數,因此要除外,然後按順序寫出2至100的所有自然數,這些數中2是質數,把它留下,把2後面所有2的倍數劃去,2後面的3是質數,接著再把3後面所有3的倍數劃去,如此繼續下去,剩下的便是100以內的全部質數。
2、試除法:
在手頭上沒有質數表的情況下,可以用試除法來判斷一個自然數是不是質數。例如判斷143、179是不是質數,就可以按從小到大的順序用2、3、5、7、11……等質數去試除。一般情況下用20以內的2、3、5、7、11、13、17、19這8個質數去除就可以了。
如143,這個數的個位是3,排除了被2、5整除的可能性,它各位數字的和是1+4+3=8,也不可能被3整除,通過口算也證明不能被7整除,當試除到11時,商正好是13,到此就可以斷定143不是質數。
擴充套件資料:
一、質數的相關性質
1、質數p的約數只有兩個:1和p。
2、初等數學基本定理:任一大於1的自然數,要麼本身是質數,要麼可以分解為幾個質數之積,且這種分解是唯一的。
3、質數的個數是無限的。
4、質數的個數公式π(n)是不減函式。
5、若n為正整數,在n²到(n+1)²之間至少有一個質數。
6、若質數p為不超過n(n≥4) 的最大質數,則p>n/2。
7、所有大於10的質數中,個位數只有1,3,7,9。
二、相關應用
質數被利用在密碼學上,所謂的公鑰就是將想要傳遞的資訊在編碼時加入質數,編碼之後傳送給收信人,任何人收到此資訊後,若沒有此收信人所擁有的金鑰,則解密的過程中(實為尋找素數的過程),將會因為找質數的過程(分解質因數)過久,使即使取得資訊也會無意義。
在汽車變速箱齒輪的設計上,相鄰的兩個大小齒輪齒數設計成質數,以增加兩齒輪內兩個相同的齒相遇齧合次數的最小公倍數,可增強耐用度減少故障。
9樓:匿名使用者
根據質數的定義,在判斷一個數n是否是質數時,只要用1至n-1去除n,看看能否整除即可。
還有更好的辦法:先找一個數m,使m的平方大於n,再用小於等於m的質數去除n(n為被除數),如果都不能整除,則n必然是質數。如我們要判斷1993是不是質數,50*50>1993,那麼只要用1993除以<50的質數看是否能整除,若不能即為質數。
100以內的質數有25個,還是比較好記的,只要記熟100以內質數,就可以快速判斷10000以內的數是不是質數。
100以內的質數有2、3、5、7、11、13、17、19、23、29、31、37、41、43、47、53、59、61、67、71、73、79、83、89、97,在100內共有25個質數。
只有1和它本身兩個因數的自然數,叫質數(或稱素數)。(如:由2÷1=2,2÷2=1,可知2的因數只有1和它本身2這兩個約數,所以2就是質數。
與之相對立的是合數:「除了1和它本身兩個因數外,還有其它因數的數,叫合數。」如:
4÷1=4,4÷2=2,4÷4=1,很顯然,4的因數除了1和它本身4這兩個因數以外,還有因數2,所以4是合數。)
10樓:沒名的精靈
根據質數的定義,在判斷一個數是否是質數時,只要用1至n-1去除n,看看能否整除即可。
11樓:鞽鞽
輾轉相除 的方法是判斷兩個數是否互質。
所以判斷是不是質數是行不通的。
應該用質數去嘗試,試到兩個緊挨這的數的時候,還沒有成功,就不要再試了,這個數就是質數。
沒有其他更好的方法,要是有我就會非常非常高興了!!^_^
12樓:
判斷一個數
是質數還是合數,那麼:
1:當這個數大於7時:就用這個數分別取除以2,3,5,7.如果這個數除以2,3,5,7都除不盡那麼這個數就是質數,只要這個數能除盡2,3,5,7的任何一個數那麼這個數就是合數.
2:當這個數小於等於7時你就只需要記得2,3,5,7是質數就行了.
13樓:heh巨蟹
質數又稱素數。一個大於1的自然數,除了1和它自身外,不能被其他自然數整除的數叫做質數;否則稱為合數。
輾轉相除法是判斷兩個數是否互質的,而不是應用在一個數上,是求兩個數的大公約數。
輾轉相除法的具體做法:用較小數除較大數,再用出現的餘數(第一餘數)去除除數,再用出現的餘數(第二餘數)去除第一餘數,如此反覆,直到最後餘數是0為止。如果是求兩個數的最大公約數,那麼最後的除數就是這兩個數的最大公約數。
這是具體流程圖,判斷一個數是否是質數就是看它能否被除1以外的數整除。
14樓:匿名使用者
約數是成對出現的。比如24,你找到個約數3,那麼一定有個約數8,因為24/3=8。
然後,這對約數必須一個在根號n之前,一個在根號n之後。因為都在根號n之前的話,
乘積一定小於n(根號nx根號n=n),同樣,都在根號n之後的話,乘積一定大於n。
所以,如果你在根號n之前都找不到約數的話,那麼根號n之後就不會有了。
15樓:匿名使用者
一個數,如果只有一和它本身的兩個因數這樣的數叫做質數
16樓:lv呂虎成
好像是除了1,2以外只要不被2,3,5,49整除的數都是質數
17樓:聆聽雨菲
質數就是在所有比1大的整數中,除了1和它本身以外,不再有別的約數,這種整數叫做質數或素數。還可以說成質數只有1和它本身兩個約數。簡單的說,就是這個數只能整除1和本身.
18樓:游擊隊副隊長
只能被1和它本身整除
19樓:裡先明
?(*^ω^*)123457890
怎樣判斷一個數字是不是質數
20樓:劍興發鏡閔
公用的完全正確的命題是:要判定正整數a是否是質數,需要用小於根號a的所有質數試除,如果都不能整除,則正整數a是質數。
不過,這方法似乎過於麻煩,我有一個質數的簡單方法,就是把這個數加一後除以六,或減一後除以六。如果加一後能整除或者減一後能整除,則此數95%是質數。我應用了質數性質的逆命題,此逆命題不絕對成立,但絕大部分情況成立,我一直這麼用,還沒錯過。
樓主不用想了,除了我最上面說的方法,沒有別的絕對成立的方法。判斷時應結合2,3,5,7,11,13等數的整除規律,先判斷;都不是,就看是什麼數,象88996546243這樣的數,建議用我的方法,象126這樣的數,建議用公用的方法,當然時間緊迫時,我的方法會節省時間並給你很高的成功率的!明白了嗎?
c 判斷數是否為質數,C 判斷一個數是否為質數
方法一 將m被 2 m 1 之間的每一個整數去除,如果都不能被整除,所以m是一個質數。方法二 將m被 2 m之間的每一個整數去除。如果m不能被 2 m 間任一整數整除,m必定是質數。兩段 的輸出結果相同。輸入一個整數 1 所以1是質數。輸入一個整數 97 所以97是質數。輸入一個整數 10 所以10...
判斷數是不是質數的演算法,流程圖,判斷一個數是不是質數的演算法,流程圖
兩個演算法 1。輸入一個數n flag 0 for int i 2 i for int j 2 j if flag 0 printf 是質數 2.輸入一個數n flag 0 for int i 2 i if int n i n i int n i 1 printf 不是質數 flag 1 break...
輸入任意數判斷它是否是素數,輸入任意一個數,判斷它是否是素數 free pascal
program sushu varn,i,j integer begin write please input n readln n j 0 for i 2 to round sqrt n doif n mod i 0 then inc j if j 1 then write yes else wr...