本文目錄一覽:
java里怎麼實現素數?
import java.util.Scanner;
//質數又稱素數,是指在一個大於1的自然數中,除了1和此整數自身外,不能被其他自然數整除的數
public class PrimeNumber {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);// 掃描器,接收控制台輸入信息
System.out.print(“請輸入一個整數:”);
try {
int num = scan.nextInt();// 取出控制台輸入的信息
if (isPrime(num)) {// 調用isPrime()方法
System.out.println(num + “是素數!”);// 若isPrime()方法返回true,輸出是素數
} else {
System.out.println(num + “不是素數!”);// 若isPrime()方法返回false,輸出不是素數
}
} catch (Exception e) {
System.out.println(“請輸入整數”);// 捕捉異常,若輸入的不是整數,輸出異常
}
}
/**
* pre
* 用於判斷一個數是否為素數,若為素數,返回true,否則返回false
* /pre
*
* @param a
* 輸入的值
* @return true、false
*/
public static boolean isPrime(int a) {
boolean flag = true;
if (a 2) {// 素數不小於2
return false;
} else {
for (int i = 2; i = Math.sqrt(a); i++) {
if (a % i == 0) {// 若能被整除,則說明不是素數,返回false
flag = false;
break;// 跳出循環
}
}
}
return flag;
}
}
java求1到n的素數
import java.util.Scanner;
/**
*
* 素數:能被1和他本身整除的數
* 思路,就是我們用一個循環獲得1-n的全部數,
* 然後在裡面的個學會中判斷這個數與他前面的
* 數是不是能整出如果能我們就跳到外部循環的下一個數繼續判斷,
* 如果不能則是素數。我們列印後跳到外部循環的下一條記錄
*
*/
public class PrimeNumber {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println(“請輸入n的值:”);
int n=sc.nextInt();
System.out.println(n+”內的素數為:”);
loop: for (int i = 2; i n; i++) {
for (int j = 2; j i; j++) {
if (i % j == 0) {
continue loop;
}
}
System.out.print(” ” + i);
}
}
}
利用Java編寫應用程序求100以內的全部素數
質數又稱素數。一個大於1的自然數,如果除了1和它自身外,不能被其他自然數整除的數;否則稱為合數。根據算術基本定理,每一個比1大的整數,要麼本身是一個質數,要麼可以寫成一系列質數的乘積;而且如果不考慮這些質數在乘積中的順序,那麼寫出來的形式是唯一的。下面是一個java求100之內的素數簡單示例。
public class test {
public static void main(String[] args) {
int i,n,k=0;
for (n = 3; n=100; n++) { //3~100的所有數
i=2;
while (in) {
if (n%i==0) break; //若能整除說明n不是素數,跳出當前循環
i++;
}
if (i==n) { //如果i==n則說明n不能被2~n-1整除,是素數
k++; //統計輸出數的個數
System.out.print(i+ “\t “);
if (k %6==0) //每輸出5個則換行
System.out.println();
}
}
}
}
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 判斷的就也很容易理解了.
java輸入的一個數,求小於等於該數的所有質數(素數).
Java程序:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print(“請輸入一個整數:”);
int number = scan.nextInt();
PrimeNumber pn = new PrimeNumber();
pn.setNumber(number);
pn.printAll();
}
}
class PrimeNumber {
protected int number;
public void setNumber(int number) {
this.number = number;
}
public int getNumber() {
return this.number;
}
public boolean isPrimeNumber(int number) {
int k = (int)(Math.sqrt(number));
for(int i=2; i=k; i++) {
if(number % i == 0) {
return false;
}
}
return true;
}
public void printAll() {
for(int i=2; i=number; i++) {
if(isPrimeNumber(i)) {
System.out.println(i);
}
}
}
}
運行測試:
請輸入一個整數: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
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/309649.html