两种判断一个数是否为质数的方法

有这样一个问题,输入一个任意整数,判断它是否为质数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 + "不是一个质数");
		}
相关文章
相关标签/搜索