获取指定数量素数.

import static java.lang.Math.ceil;
import static java.lang.Math.sqrt;

public class GetPrimes{
	
	public static void main(String[] args){
		long[] primes = getPrimes(100);
		for(long prime : primes){
			System.out.println(prime);
		}
	}

	private static long[] getPrimes(int count){
		assert count >= 2;
		long[] primes = new long[count];
		primes[0] = 2;
		primes[1] = 3;

		for(int i = 2 ; i < count ; i ++){
			//这层循环用来计算素数的个数.

			long num = primes[i - 1] + 2;
			int j = 0;
			long limit = (long)ceil(sqrt(num));

			for(;(j < i) && (primes[j] < limit);){
				//这层循环用来判断一个数是否是素数.
				if(num % primes[j] == 0L){
					num = num + 2;
					//素数必为奇数,2除外.
					j = 0;
					limit = (long)ceil(sqrt(num));
					//由于非素数是两个数相乘的结果,所以这里只要取值判断上限设置为平方根+1即可.
					continue;
				}
				j ++;
			}
			primes[i] = num;
		}
		return primes;
	}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值