JAVA打印300以内的质数

JAVA打印300以内的质数

package JAVA_Project_01_04;//创建一个包
//具体做法是:先把N个自然数按次序排列起来。1不是质数也不是合数,要划去。第二个数2是质数留下来,
//而把2后面的所有能被2整除的数都划去。2后面第一个没被划去的数是3,把3留下
//再把3后面所有能被3整除的数都划去。3后面第一个没被划去的是5,再把5后面所有能被5整除的数都划去。
//这样一直下去,就会把不超过N的全部荷属都帅选掉,留下的就是不超过N的全部质数
import java.util.Arrays;//导入类

public class TextPrimeNumber {//操作求指定范围内的质数的类

    private static boolean[] filterNumber(int num) {//帅选法求质数
        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;
    }
    public static void showAppointArea(int number){//显示指定范围内的质数
        boolean[] primes= filterNumber(number);//调用方法赋值给布尔类型的数组
        int num=0;
        if (primes!=null){
            for (int i=1;i<primes.length;i++){//循环数组操作数组的元素
                if (primes[i]){//如果数组元素值为true,则下标值为质数
                    System.out.println(i+"");//输出质数
                    if (++num%10==0)//每输出10个质数换行
                        System.out.println();
                }
            }
            System.out.println();
        }
        System.out.println("一共有"+num+"个");
    }

    public static void main(String[] args) {//Java程序主入口处
        int number=300;//声明范围
        System.out.println("范围在"+number+"内的质数有:");
        showAppointArea(number);//调用方法显示质数
    }
}
/*(1)filter Number()方法使用帅选法求传入参数值范围内的所有的质数。声明一个布尔类型的数组,
数组元素值为true时,表示该元素的下标为质数。如果number是一个质数,那么number的位数都不是质数,
利用Array.fill()方法初始化布尔类型数组,然后利用循环将数组下标为number的倍数的元素值设置为false。
这样就能判断那部分元素是质数了
(2)showAppointArea()方法调用FilterNumber()方法,得到布尔类型数组,将值为true的元素的下标在控制台输出。
 */
发布了70 篇原创文章 · 获赞 10 · 访问量 3206

猜你喜欢

转载自blog.csdn.net/JN_Cat/article/details/102508161