素數java
A. java 判斷素數
importjava.util.Scanner;
publicclassPrimeNumber{
publicstaticvoidmain(String[]args){
Scannerscanner=newScanner(System.in);
System.out.println("請輸入一個數:");
intnum=scanner.nextInt();//輸入的待判斷的數字
if(isPrime(num))
System.out.println("數字"+num+"是素數");
else
System.out.println("數字"+num+"不是素數");
}
/**
*判斷一個數是否是素數
*演算法核心:
* 定理:如果n不是素數,則n有一個因子d滿足1<d<=sqrt(n)
* 證明:如果n不是素數,則由定義:n有一個因子d滿足1<d<n。如果d大於sqrt(n),則n/d是滿足1<n/d<=sqrt(n)的一個因子
*
*由此可知:1.小於等於2的不是素數2.2的倍數的數也不是素數3.如果從小到大開始遍歷,一直到sqrt(n)還不能找到一個因子d,
* 則可以說明該數是素數
*
*@paramnum待判斷的數
*@return判斷結果
**/
privatestaticbooleanisPrime(intnum){
if(num<=2||num%2==0)
returnfalse;
for(inti=3;i*i<=num;i+=2){
if(num%i==0)
returnfalse;
}
returntrue;
}
}
詳細的解釋已經寫在上面的代碼的注釋中了,當然這種演算法不算最優,但是比較簡單易理解。當然更優的方案可以採用「篩選法」,具體的可以自行網路
B. java中怎麼求素數
首先樓主應該對素數的定義已經清楚了吧?其實就是一個數,如果存在1和它本身以外,有數能整除它,這個數就不是素數.
在這里,有2個關鍵的變數,我估計解釋一下你就能看得明白這個演算法了.
1.關於變數k.變數k的作用是優化整個演算法,因為比如要判斷一個數13是不是素數,我們沒必要從2循環到13.只要循環到對13開根號.13開根號大概是3.6多,強轉為int類型後是3.也就是說只要檢查2,3是否能整除13.如果不能,13肯定是一個素數.因為比如48這個數,你前面檢測到被4整除等於12,那麼繼續循環超過Math.sqrt(48)的話,無非就是得到一個反過來的被12除等於4的結果.這個沒有必要.
2.關於變數j.注意點1:j是在最外層的循環體中定義的.這個時候剛定義完,j的值是初始的0.然後j從2開始,一直到小於等於k結束.這里是控制嘗試整除的循環次數.一旦發現在這個范圍內有數能整除i,那麼就跳出循環.
所以,對於你不理解的那個部分,首先確定一點,程序只要執行到break,就說明這個數是素數.
例如我們這次k = 10,那麼是要從j = 2到10逐一檢測 i 是不是能被 j 整除.當j = 7的時候比如可以整除了,就跳出當前內層循環了.這時候, j 顯然是不大於 k 的,因為只要是中途跳出,因為內層循環(j = 2; j <= k; j++)的控制,只要在循環過程中跳出來的,那麼j 肯定 <= k.
只有循環到j = 10依然沒有break的話,根據for循環的執行順序,會執行j++,然後去判斷j <= k 是否為true,為true則繼續下一次循環,否則循環結束.而在這里,如果到10還沒有能夠整除的話,j是會在10的基礎上自增的.這時候j就=11了.
那麼if ( j > k )就不成立了,則i 不會被輸出.
總結一點:就是如果中途or最後一次循環,找到能整除的數了,那麼因為break的關系,最後就不會執行 j++, 所以j <= k的條件是能保證的. 換言之,如果j > k (亦即j <= k 的取反)表示沒有找到能整除的數.其實j最大也就只能等於k+1.
另外,,你也可以自己修改修改,來加深理解.例如
boolean isPrime; //定義布爾變數判斷是否素數.是:true;否:false
for (int i = 3; i <= 100; i++) {
isPrime = true;
int k = (int) Math.sqrt(i);
for (int j = 2; j <= k; j++) {
if (i % j == 0) {
isPrime = false; //如果能夠有數整除i,那麼就不是素數.
break;
}
}
if (isPrime) {
System.out.println(i);
}
}
這樣就沒有必要在外層循環里就定義j這個變數了.如果我上面說的你理解還是比較困難,可以先理解用布爾變數來控制的寫法.這個理解了,用j > k 判斷的就也很容易理解了.
C. Java中 什麼是素數什麼條件
素數是指不能被除了一和自身整除的數,所以判斷num是不是素數只有從二開始一直除到num/2,都不能整除就返回true,表示是素數,否則返回false,表示不是素數。
D. java 1到100內的質數
int i,j;
for(i = 2; i <= 100; i++){//從2數到100,判斷之間的每一個數是否是質數
//下面的循環是質數判斷過程
for(j = 2; j <= i/2; j++){
if(i % j == 0)
break;//如果這個數能被一個數整除,那麼這個數不是質數。break的作用是跳出此次循環,進入下一次循環。
}
if(j > i/2){
System.out.println(i);//如果這個數不能被自身1/2的數整除,他就是質數,輸出這個數.System.out.println()這個語句就是輸出語句
}
}
System.out.println();//這句語句是多餘的,什麼也沒列印。
完整代碼及運行結果如圖。
拓展資料
質數(prime number)又稱素數,有無限個。質數定義為在大於1的自然數中,除了1和它本身以外不再有其他因數。
這道題只要理解質數的計算方法就容易解答。
E. 關於java求素數
素數,除了1和它本身之外不能別的數整除
for(j=2;j<=50;j++){ (從2 開始,把每個小於自己的數都除一遍)
for( i=2;i<=j/2;i++){ (i的值只需要是j的一半就可以判斷,列如j=30,i從2開始,只需要除到i=15就可以)
if(j%i==0) (取余=0,即J可以被I整除)
break;
}
if(i>j/2) (當i的值增加到大於j的一半還沒能整除J時,j一定是素數)
{
System.out.println(""+j+"是素數");
}
}
}
F. java里怎麼實現素數
importjava.util.Scanner;
//質數又稱素數,是指在一個大於1的自然數中,除了1和此整數自身外,不能被其他自然數整除的數
publicclassPrimeNumber{
publicstaticvoidmain(String[]args){
Scannerscan=newScanner(System.in);//掃描器,接收控制台輸入信息
System.out.print("請輸入一個整數:");
try{
intnum=scan.nextInt();//取出控制台輸入的信息
if(isPrime(num)){//調用isPrime()方法
System.out.println(num+"是素數!");//若isPrime()方法返回true,輸出是素數
}else{
System.out.println(num+"不是素數!");//若isPrime()方法返回false,輸出不是素數
}
}catch(Exceptione){
System.out.println("請輸入整數");//捕捉異常,若輸入的不是整數,輸出異常
}
}
/**
*<pre>
*用於判斷一個數是否為素數,若為素數,返回true,否則返回false
*</pre>
*
*@parama
*輸入的值
*@returntrue、false
*/
publicstaticbooleanisPrime(inta){
booleanflag=true;
if(a<2){//素數不小於2
returnfalse;
}else{
for(inti=2;i<=Math.sqrt(a);i++){
if(a%i==0){//若能被整除,則說明不是素數,返回false
flag=false;
break;//跳出循環
}
}
}
returnflag;
}
}
G. Java語言中,用類的方法求素數
importjava.util.ArrayList;
importjava.util.Scanner;
publicclassPrimeNumber{
/**
*判斷一個數是否是素數
*@paramnumber
*@return
*/
publicbooleanisPrimeNumber(intnumber){
booleanisPrimeNumber=false;
intflag=0;
for(inti=2;i<number;i++){
if(number%i==0){
flag=1;
}
}
if(flag==0){
isPrimeNumber=true;
}
returnisPrimeNumber;//返回true時為素數
}
/**
*得到一個區間的素數
*@paramstartNo
*@paramendNo
*@return
*/
publicArrayList<Integer>getPrimeNumber(intstartNo,intendNo){
ArrayList<Integer>list=newArrayList<Integer>();
for(intnum=startNo;num<=endNo;num++){
if(newPrimeNumber().isPrimeNumber(num)){
list.add(num);
}
}
returnlist;
}
/**
*測試
*@paramargs
*/
publicstaticvoidmain(String[]args){
PrimeNumberprimeNumber=newPrimeNumber();
ArrayList<Integer>list=null;
System.out.println("請輸入你要測試的數");
intinput=newScanner(System.in).nextInt();
if(primeNumber.isPrimeNumber(input)==true){
System.out.println("您輸入的數為素數");
}
else{
System.out.println("您輸入的數不是素數");
}
System.out.println("請輸入你所要求素數的區間");
System.out.println("請輸入區間的下限(較小值)");
intstartNo=newScanner(System.in).nextInt();
System.out.println("請輸入區間的上限(較大值)");
intendNo=newScanner(System.in).nextInt();
list=primeNumber.getPrimeNumber(startNo,endNo);
System.out.println("您的區間素數為");
for(inti=0;i<list.size();i++){
System.out.print(list.get(i)+" ");
}
System.exit(0);
}
}
H. java求素數代碼
求1-N以內的所有素數,實現思路如下:
1、 得到1到n之間的素數,存到一個ArrayList集合。
(8)素數java擴展閱讀:
實現功能的編程事項:
1、模塊化思想。
先拆分需求,先拆分先考慮怎麼確定一個數是不是素數,然後再復用到所有。不能把方法堆到一起,否則無法復用代碼。
2、注意注釋。
就算是自己的測試代碼,盡量寫清楚注釋,這樣即使過了三個月,再看代碼,也能清晰明了。不要覺得簡單,就懶得注釋。
3、注意參數命名。
從類名到方法名,再到變數名,都不能隨意取名,關於這個命名,不要嫌棄長,重點是意思清楚明白。見名知意(語義化),是最好的。
I. java判斷素數的代碼
法一:
class Test2
{
public static void main (String []args)
{ int j;
for(int n=1;n<=100;n++)
{
for(j=2;j<=n-1;j++)
{
if(n%j==0)
break;
}
if(j>=n-1)
System.out.println(n);
}
}
}
法二:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class sushu extends Applet implements ActionListener{
TextField t1=new TextField(5);
TextField t2=new TextField(5);
Button b1=new Button("begin");
int m,n;
public void init(){
add(t1);
add(t2);
add(b1);
b1.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
m=Integer.parseInt(t1.getText());
n=Integer.parseInt(t2.getText());
repaint();
}
public void paint(Graphics g){
boolean f;
int i,j,k=0;
for(i=m;i<=n;i++){
f=true;
for(j=2;j<=i-1;j++)
if(i%j==0)
{f=false;break;}
if(f){
g.drawString(" "+i,(k%10)*20+20,(k/10)*60+80);
k=k+1;
}
}
}
}
J. java怎麼判斷素數
1、目前使用較有效的方法是試除法。用試除法判斷一個自然數a是不是素數時,用各個素數從小到大依次去除a,如果到某一個素數正好整除,這個a就可以斷定不是素數;如果不能整除,當不完全商又小於這個素數時,就不必再繼續試除,可以斷定a必然是素數。
2、素數又稱質數。一個大於1的自然數,除了1和它本身外,不能被其他自然數整除,換句話說就是該數除了1和它本身以外不再有其他的因數;否則稱為合數。
3、素數是與合數相對立的兩個概念,二者構成了數論當中最基礎的定義之一。基於質數定義的基礎之上而建立的問題有很多世界級的難題,如哥德巴赫猜想等。目前為止,人們未找到一個公式可求出所有素數,所以還沒有固定的判斷公式。
4、一般記住100以內的素數就可以了。有2、3、5、7、11、13、19、17、23、29、37、31、41、47、43、53、59、61、71、67、73、83、89、79、97,一共25個。