方法一:暴力
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n=input.nextInt();
int[] a=new int[35000];
int t=0;
for(int i=2;;i++)
{
boolean f=true;
for(int j=2;j*j<=i;j++)
{
if(i%j==0)
{
f=false;
break;
}
}
if(f==true)
a[t++]=i;
if(t==n)
break;
}
System.out.println(a[n-1]);
}
}
方法二:筛法
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n=input.nextInt();
boolean[] a=new boolean[400001];
int t=0;
a[0]=true;
a[1]=true;
for(int i=2;i<=400000;i++)
{
for(int j=i+i;j<=400000;j+=i)
a[j]=true;
}
for(int i=0;i<=400000;i++)
{
if(a[i]==false)
t++;
if(t==n)
{
System.out.println(i);
break;
}
}
}
}
优化筛法
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n=input.nextInt();
boolean[] a=new boolean[400001]; //假设a为所有奇数,并初始化都为素数,例如:a[0]=flase 代表3为素数。
int t=0;
for(int i=0;i<Math.sqrt(400000);i++)
{
if(a[i]==false)
for(int k=i+i+3,j=k*i+k+i;j<200000;j+=k) //筛法的起点是k^2,对应在a[]中的位置是k*i+k+i
a[j]=true;
}
for(int i=0;i<=400000;i++)
{
if(a[i]==false)
t++;
if(t==n-1) //注意2也是素数,但是没有包含在a[]中
{
System.out.println(i*2+3);
break;
}
}
}
}