题目:求第N个素数,此时N较大,应运用筛法,提高效率
public class _4_数学_06素数_筛法 {
public static void main(String[] args) {
long first = System.currentTimeMillis();
byte[] arr = new byte [1300000]; //节约空间 标记为1的不是素数 , 为0 的是素数
/*double t = 100;
while(t/Math.log(t)<100002) //求第x个 密度大约是n/ln(n)>x;
t*=1.1;
System.out.println(t);*/
for(int i=2;i<arr.length/2;i++) //从数组第二个开始,每个数都进行筛选 , 是这个数的倍数时筛掉
{
if(arr[i]!=1) //如果这个数已经被筛掉,跳过,例如4已经被2筛掉 是4的倍数必然也是2的倍数
{
for(int k=2;k<=arr.length/i;k++) //这个数仍未被筛掉,为素数,筛选他的倍数,
{
if(i*k<arr.length)
arr[i*k]=1;
}
}
}
int sum = 0; //输出
for(int i=0;i<arr.length;i++)
{
if(arr[i]!=1)
{
sum++;
if(sum==100002)
System.out.println(i+" "+sum);
}
}
long second =System.currentTimeMillis()-first;
System.out.println(second+"ms");
}
}