Java寻找素数,寻找前50(n)个素数

寻找前50个素数

public class E02 {
    public static void main(String[] args){
        int count = 0;  
        //记录素数的个数,方便写入数组中
        int result[] = new int[50]; 
        //创建一个结果数组用来保存素数
        int num = 1;
        //从num=1开始检测是否为素数
        while (count<50){
            int step = 0;
            //记录能被整除的次数
            for(int j=1;j<=num;j++){
                if(num%j==0){
                    step++;
                }
            }
            if (step==2){
                result[count]=num;
                count++;
                //控制while循环
            }
            num++;
        }
        //输出格式控制
        for (int k=0;k<50;k++){
            if (k%10==0){
                System.out.println();
                System.out.print(result[k]+" ");
            }
            else{
                System.out.print(result[k]+" ");
            }
        }
    }
}

结果:

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 211 223 227 229

如需其它数量的素数,改变数组的大小即可。

部分改进:

对于是否为质数的判断,不需要遍历1到n的所有数,仅需遍历2到根号下n即可。

引自知乎:

首先,约数是成对出现的。比如24,你找到个约数3,那么一定有个约数8,因为24/3=8。

然后,这对约数必须一个在根号n之前,一个在根号n之后。因为都在根号n之前的话,

乘积一定小于n(根号nX根号n=n),同样,都在根号n之后的话,乘积一定大于n。

所以,如果你在根号n之前都找不到约数的话,那么根号n之后就不会有了。



作者:刘明
链接:https://www.zhihu.com/question/21808179/answer/21250639
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

代码改进:

public class E02 {
    public static void main(String[] args){
        int count = 0;  
        //记录素数的个数,方便写入数组中
        int result[] = new int[50]; 
        //创建一个结果数组用来保存素数
        int num = 2;
        //从num=1开始检测是否为素数
        while (count<50){
            int step = 0;
            //记录能被整除的次数
            for(int j=1;j<=Math.sqrt(num);j++){
                if(num%j==0){
                    step++;
                }
            }
            if (step==1){
                result[count]=num;
                count++;
                //控制while循环
            }
            num++;
        }
        //输出格式控制
        for (int k=0;k<50;k++){
            if (k%10==0){
                System.out.println();
                System.out.print(result[k]+" ");
            }
            else{
                System.out.print(result[k]+" ");
            }
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值