首页 > 代码库 > Java杂谈三之判断素数以及穷举素数

Java杂谈三之判断素数以及穷举素数

首先确认下什么是素数,又称质数

百度的定义解答:

质数(prime number)又称素数,有无限个。一个大于1的自然数,如果除了1和它本身

外,不能被其他自然数整除(除0以外)的数称之为素数(质数)


明确了素数的定义后,下面用java来判断素数以及穷举2-999以内的素数,还是一样,

要看的是对一个数进行判断或者对一组数进行判断的思想,至于怎样判断的,百度的定义已经给了很好的解答思路。

JavaPrimeNubmer:类名

enumPrimeNumber():穷举2-999以内的所有素数

main():主函数


package JavaTestSelf;

import java.util.Scanner;

//从键盘输入一个数,判断是否为素数

public class JavaPrimeNumber {
	
	//穷举2-999以内的所有素数
	public void enumPrimeNumber()
	{
		for(int i=2;i<1000;i++)
		{
			//设置一个"开关"
			boolean IsPrimeNubmer = true;
			for(int j=2;j<i;j++)
			{
				if(i%j==0)
				{
					//这边不可以用return直接结束程序
					//因为它要继续下去判断下一个数是否为素数
					//用return结束就不继续执行下去了
					//return只限于判断单个数是否为素数
					//这里要用到一个IsPrimeNubmer"开关"
					IsPrimeNubmer=false;
				}
			}
			if(IsPrimeNubmer==true)
			{
				System.out.println(i + "是素数");
			}			
		}
	}
	
	public static void main(String[] args) {
		//实例化类的对象
		JavaPrimeNumber javaPN = new JavaPrimeNumber();
		//穷举2-999以内的所有素数
		javaPN.enumPrimeNumber();
		//以下是判断从键盘上输入的数是否为素数
		System.out.println("请输入一个数:");
		Scanner scan = new Scanner(System.in);
		int temp = scan.nextInt();
		for(int i=2;i<temp;i++)
		{
			if(temp%i==0)
			{
				System.out.println(temp + "不是素数");
				return;
			}
		}
		System.out.println(temp + "是素数");
	}

}

注意以上的代码中,对一个数的判断是否为素数,可以走两条路线:


一个是通过对小于自身的数的取余,如果能整除,直接结束函数,并说明不是素数,否则跳出循环并说明是素数。


另一个就是通过类似开关的概念,判断是一样的,只不过判断不是素数的时候,把开关置反,跳出循环,对开关进行判断,如果开关为真,则是素数。



两种方法最大的区别是到底是针对单独的一个数进行判断,还是对一组数进行判断。前者判断后直接结束程序,输出结果即可。后者则不可以沿用前者的,不能过早的结束程序,因为是一组数的判断,所以用开关的方法来判断再输出。