校招算法篇之N以内的素数

本文介绍了在面试中遇到的求N以内的素数算法题目,从常规解法到逐步优化时间复杂度的过程,包括剔除偶数检查、排除合数检查,以及使用素数定理优化数组大小。通过Java实现,讨论了ArrayList与数组的性能对比,并给出了实际应用中的数组容量估算方法。
摘要由CSDN通过智能技术生成

博客断更了一段时间,现在准备重新捡起来。写博客是一个总结,分享的过程,也是提升自我表达的很好的方式。将一个问题以深入浅出的方式表达出来,让读者读的开心,容易理解,这是我们开发人员职业生涯当中很重要的一个能力。


前一阵子秋招,笔试面试了挺多公司,也积累了一点点自己的经验,想陆续分享出来,也请各位多多斧正。


第一家面试的是深圳一家游戏公司,手写算法题,求N以内的素数,当然需要一步步的去优化时间复杂度,过程就不细说了,下面说说我的理解。

1、首先是最常规的解法,判断n是不是素数,即判断n能否被[2,sqrt(n)]整除,若一个数不是素数,那么它分解的因数中一定有一个小于等于sqrt(n),另一个大于等于sqrt(n)。

	static List<Integer> prime1(int n) { //n>=2
		List<Integer> pri=new ArrayList<>();
		pri.add(2);
		for(int i=3;i<=n;i=i+2) {
			int tmp=(int)Math.sqrt(i);
			int j=2;
			for(;j<=tmp;j++) {
				if(i%j==0) break;
			}
			if(j>tmp) pri.add(i);
		}
		return pri;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值