蓝桥杯冲刺31天day9打卡

 1、找素数

用欧拉筛或者埃氏筛

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

素数就是不能再进行等分的整数。比如:7,11。而 99 不是素数,因为它可以平分为 3 等份。一般认为最小的素数是2,接着是3,5,...

请问,第 100002(十万零二)个素数是多少?

请注意:“2” 是第一素数,“3” 是第二个素数,依此类推。

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M
public class 找素数{//直接欧拉筛,当方便快捷
	static int count=0;
	public static void main(String[]args) {
		int ed = (int) 1e7;//因为要输出第100002个素数,所以要开大一点
		boolean[]isPrime = new boolean[ed+1];
		int[]Prime = new int[ed];
		for(int i = 2;i<=ed;i++) {
			if(!isPrime[i]) {
				Prime[count++] = i;
				if(count==100002) {//已经把想要的素数存了,没必要再继续找了。
					break;
				}
			}
			for(int j =0;j<count;j++) {
				if(i*Prime[j]>ed) {
					break;
				}
				isPrime[i*Prime[j]]=true;//每个合数都会被其最小的质因子筛掉
				if(i%Prime[j]==0) {//避免重复筛
					break;
				}
			}
		}
			System.out.println(Prime[100001]);//注意下标从0开始
	}
}

 

 

先睡了,四级

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值