(二).打印一定范围内的质数



/*

 * 

 *                             求指定范围内的质数

 * 质数:除了1和他本身外无别的因数

 * 思路:1.用两个for循环将范围内的数全部验证一遍(缺点:速度慢,重复验证)



*      2.先把N个自然数按次序排列起来,1不是质数划去,第二个2是质数留下来,然后吧2后面的所有2的倍数划区,以此类推,留下来的就是质数。

 * 

 * 一个数学原理:若小于根号m的数无法整除m,那大于根号m的数也不能整数m。(这个原理可以简化过程)

 * 

 */



package
com.zf.s3;

import
java.util.Arrays;

 

public class ZhiShu 

{

    private static boolean[] filterNumber(int num)

    {

        if(num<0) 

        {//输入是否合法

        System.out.println("范围必须大于0");

        return null;

        }

    

    boolean[] isPrime=new boolean[num+1];                           //声明布尔类型数组,标注知否为数组,是就为ture,不是则为false。

    

    isPrime[1]=false;                                               
//1不是质数

    Arrays.fill(isPrime,2,num+1,true);                              //将其他数置为ture

    

    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])

                {

                   System.out.print(i+"  ");                        //输出质数

                   

                   if(++num%10==0)

                       System.out.println();                          //每输出十个质数换行

                   

                }

            

            System.out.println();

            

        }

        

        System.out.println("一共有"+num+"个");

        

    }

    

    

    public static void main(String[] args)

    {

        int number =200;

        System.out.println("范围在"+number+"内的质数有:");

        showAppointArea(number);

        

    }

    

    

}






运行结果

范围在200内的质数有:
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97 101 103 107 109 113
127 131 137 139 149 151 157 163 167 173
179 181 191 193 197 199
一共有46个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值