JAVA实现埃式筛查找一定数内的素数

JAVA实现埃式筛查找一定数内的素数

前言:在先前的c语言学习中学到过判断素数的办法,除了运用素数只能和1与本身进行相除的原理外,还从老师那里学习到埃式筛法判断素数。在初学java的过程中,我想着在java语言中实现埃式筛。

1.原理

何为埃式筛?假设我们要寻找n以内的素数,从2开始逐步向n递增,2是最小的素数,随后给2的倍数(倍数大于1)作上标记。然后就到了3,同样将3的倍数(倍数均大于1)作上标记,接着递增到4。随后均是这样的过程,通过这样的操作,就能一次枚举n以内的素数。

2345678910
当为2时23/5/7/9/
当为3时23/5/7///
当为4时23/5/7///

通过这个图,我们可以看到当为4时,4以内的素数已被全部找出。

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        int  maxNum = Integer.MAX_VALUE;///获取int类型的最大值
        Scanner x1=new Scanner(System.in);
        int num;要输入的数字
        int j=2;
        num = x1.nextInt();
        boolean shuZu[] = new boolean[maxNum/10];///创建布尔类型的数组用来标记倍数
        for(int i=2;i<=num;i++){
            shuZu[i]=true;
        }
        shuZu[0]=shuZu[1]=false;

        for(int i=2;i<=num;i++){
            if(shuZu[i]!=false){
                for(j=i*2;j<=num;j+=i){
                    shuZu[j]=false;
                }
            }
            if(shuZu[i]!=false){
                System.out.println(i);

            }
        }

    }
}

功能实现的代码:

 for(int i=2;i<=num;i++){//先将布尔类型的数组全部赋成true
            shuZu[i]=true;
        }
        shuZu[0]=shuZu[1]=false;/0与1不是素数

        for(int i=2;i<=num;i++){///从2开始遍历
            if(shuZu[i]!=false){减少运算量的判断语句,用于判断是否是被标记的倍数
                for(j=i*2;j<=num;j+=i){///j必须初始化为i*2,如果为j=i会将素数本身标记。
                    shuZu[j]=false;///标记倍数
                }
            }
         }
  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值