兩種判斷一個數是否爲質數的方法

有這樣一個問題,輸入一個任意整數,判斷它是否爲質數java

例如:若是是質數就輸出「7是質數」,不然輸出‘8不是質數’。code

  • 質數:除了1和它自己以外,不能被其餘數整除的正整數稱質數。input

    首先我進行了步驟分析。for循環

步驟分析:class

  • a)經過Scanner獲取一個正整數(假設正整數從3開始),假設使用num變量保存import

  • b)經過for循環獲的[2, num)之間全部的正整數,假設循環變量爲i。變量

  • c)判斷num是否爲質數。循環

    須要num和[2, num)全部的整數相除,若是num和[2, num)全部的整數都不能整除,則證實是質數im

    方案一:假設法。next

  • 1)在判斷某一個數是否爲質數以前,先假設這個整數是一個質數。

    boolean flag = true;

  • 2)在循環體中,若是num能被[2, num)之間其中一個數整除,證實num就不是質數

    推翻假設,修改flag的標記值。--> flag = false;

    由於此處已經證實num不是一個質數,那麼應該跳出循環。 --> break;

  • 3)在循環以外,判斷flag標記的值。

    若是flag標記值依舊爲true,則證實假設成立,num就是一個質數。

    若是flag標記值爲false,那麼證實假設不成立,num不是一個質數。

import java.util.Scanner;

public class BreakTest {
	public static void main(String[] args) {
		// 1.經過Scanner獲取一個正整數(假設正整數從3開始)
		Scanner input = new Scanner(System.in);
		System.out.print("請輸入一個正整數:");
		int num = input.nextInt();
		// 2.經過for循環獲的[2, num)之間全部的正整數
		// a)假設num是一個質數
		boolean flag = true;
		for(int i = 2; i < num; i++) {
			// 3.判斷num是否爲質數
		    // b)在循環體中,若是num能被[2, num)之間其中一個數整除,證實num就不是質數	
			if(num % i == 0) {
				// 推翻假設,修改flag的標記值
				flag = false;
				// 既然此處已經證實num不是一個質數,那麼應該跳出循環
				break;
			}
		}
		// c)判斷flag標記的值,從而肯定num是否爲質數
		if(flag) { // 證實num是一個質數
			System.out.println(num + "是一個質數");
		}
		else { // 證實num不是一個質數
			System.out.println(num + "不是一個質數");
		}
	}
}

方案二:經過for循環的執行順序,從而解決問題。

  • 核心:若是循環正常執行完畢,那麼i的取值恰好爲num,也就證實在循環體中num%i==0這個條件永遠沒成立過,從而證實num是一個質數
import java.util.Scanner;

public class BreakTest {
	public static void main(String[] args) {
		// 1.經過Scanner獲取一個正整數(假設正整數從3開始)
		Scanner input = new Scanner(System.in);
		System.out.print("請輸入一個正整數:");
		int num = input.nextInt();
		// 2.經過for循環獲的[2, num)之間全部的正整數
		int i = 2;
		for (; i < num; i++) {
			// 3.判斷num是否爲質數
			if(num % i == 0) { // 證實num不是一個質數
				break;
			}
		}
		if(i == num) {
			System.out.println(num + "是一個質數");
		}
		else { // 證實num不是一個質數
			System.out.println(num + "不是一個質數");
		}
相關文章
相關標籤/搜索