JAVA——求出指定范围内所有的质数

版权声明:DY https://blog.csdn.net/Atishoo_13/article/details/82982563

求出指定范围内所有的质数


1.要求

在窗口输出指定范围内所有的质数,并对所有输出的质数个数进行计数。

2.质数

在所有比1大的整数中,除了1和它本身以外,不再有别的因数,这种整数叫做质数或素数。还可以说成质数只有1和它本身两个约数。

3.原理

具体做法是:先把N个自然数按次序排序起来。1不是质数,也不是合数,要划去。第二个数是质数留下来,而把2后面的所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都删掉,留下的就是不超过N的全部质数。

4.语法

  • filterNumber()方法使用筛选法求传入参数值范围内的所有的质数。声明一个布尔类型的数组,数组元素的值为true时,表示该元素的下标为质数。如果number是一个质数,那么number的位数都不是质数,利用Array.fill()方法初始化布尔类型数组,然后利用循环将数组下标为number的倍数元素值设置为false。这样就能判断哪部分元素是质数了。
  • ShowAppointArea()方法调用FilterNumber()方法,得到布尔类型数组,将值为true的元素的下标在控制台输出。

5.代码

import java.util.Arrays;

public class rw31 {

	public static void main(String[] args) {
		//JAVA主程序入口
		// TODO Auto-generated method stub
		int number=300;  //对范围进行设置
		System.out.println("范围在"+number+"内的质数有:");
		showAppointArea(number); //调用方法显示质数
	}

	public static void showAppointArea(int number) {
		//显示指定范围内的质数
		// TODO Auto-generated method stub
		boolean[]primes=FilterNumber(number);//调用方法赋值给布尔类型的数组
		int num=0;
		if(primes!=null){
			for(int i=1;i<primes.length;i++){ //循环数组操作数组的元素
				if(primes[i]){
                                        //如果数组元素值为true,则下标值为质数
					System.out.print(i+" ");//输出质数
					if(++num%10==0)//每输出十个质数后进行换行
						System.out.println();
				}
			}
			System.out.println("\n(一共有"+num+"个)");
		}
	}

	private static boolean[] FilterNumber(int num) {
		//筛选法求质数
		// TODO Auto-generated method stub
		if(num<=0){ //判断指定的范围
			System.out.println("范围必须大于0");
			return null;
		}
		boolean[]isPrime=new boolean[num+1];
		//申明布尔类型数组,长度为范围+1
		//数组标注是否为质数,下标值为质数,那么对应数组元素值为true
		//例如2是质数,isPrime[2]=true
		isPrime[1]=false;//1不是质数
		Arrays.fill(isPrime, 2,num+1,true);//将布尔数组元素的值都赋为true
		int n=(int)Math.sqrt(num); //Math.sqrt方法用于求开方
		for(int i=1;i<n;i++){
			if(isPrime[i]){  //如果是质数,那么i的倍数不是质数
				for(int j=2*i;j<=num;j+=i){
					isPrime[j]=false;
				}
			}
		}
		return isPrime;
	}

}

6.结果

编译结果如下图所示:
在这里插入图片描述
运行结果如下图所示:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Atishoo_13/article/details/82982563