Java 求第n个素数

Java 求第n个素数,java,primes,Java,Primes,我不知道为什么当我输入某些素数时,我的代码不能工作。我已经尝试过几次修改我的代码,但是每修改一次,我都会让别人觉得更糟。因此,如果我更改代码使其适用于nthprime=8,我会意识到nthprime=7,而其他一些代码则会停止工作。有人能指出我的一个具体缺陷吗?或者我应该重新思考代码的大纲。多谢各位 public class NthPrime { public static void main(String[] args) { int nthprime; System.ou

我不知道为什么当我输入某些素数时,我的代码不能工作。我已经尝试过几次修改我的代码,但是每修改一次,我都会让别人觉得更糟。因此,如果我更改代码使其适用于nthprime=8,我会意识到nthprime=7,而其他一些代码则会停止工作。有人能指出我的一个具体缺陷吗?或者我应该重新思考代码的大纲。多谢各位

public class NthPrime {

public static void main(String[] args) {

    int nthprime;

    System.out.println("Enter value for n:");
    nthprime=IO.readInt();

    while(nthprime <= 0){
        System.out.println("Enter a positive value for n");
        nthprime=IO.readInt();
    }

    if(nthprime == 1){
        System.out.println("The nth prime number is: "+2);
    }
    if(nthprime == 2){
        System.out.println("The nth prime number is: "+3);
    }

    if(nthprime > 2){

    int prime=2; 
    int num=3;
    int square;
    boolean nonprime=false;

    while(prime < nthprime){
        prime++;
        num+=2;
        square = (int) Math.sqrt(num);
        for (int i=3; i <= square; i++){
            if (num % i == 0){
                nonprime=true;
                num+=2;
            }
            if(nonprime==false){
                prime++;
                num+=2;
            }
        }
    }
    System.out.println("The nth prime number is: "+num);
    }
}
公共类{
公共静态void main(字符串[]args){
整数素数;
System.out.println(“输入n的值:”);
nthprime=IO.readInt();
while(质数2){
int素数=2;
int num=3;
内景广场;
布尔非质=假;
while(prime
for (int i=3; i <= square; i++){
        if (num % i == 0){
            num+=2;
        }
        else {
            prime++;
            num+=2;
        }
    }

for(inti=3;i创建另一个方法来检查数字是否为素数,并使用while循环来获取素数

public static void main(String[] args) {
    ...

    if (nthprime == 1) {
        System.out.println("The nth prime number is: 2");
    } else {
        int num = 3;

        for (int i = 2; i <= nthPrime; i++) {
            while(!isPrime(num)) {
                num += 2;
            }

            num += 2;
        }

        System.out.println("The nth prime number is: "+ (num - 2));
    }
}

private static boolean isPrime(int n) {
    int sqrt = (int) Math.sqrt(n);

    for (int i = 2; i <= sqrt; i++) {
        if (n % i == 0) {
            return false;
        }
    }

    return true;
}
publicstaticvoidmain(字符串[]args){
...
如果(n次素数==1){
System.out.println(“第n个素数为:2”);
}否则{
int num=3;
对于(inti=2;i
import java.util.Scanner;
公共类NewNthPrime{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
int t=in.nextInt();
对于(int a0=0;a0虽然(为什么不管for循环中发生了什么,你都要做num+=2?@ergonaut素数不能是偶数,所以如果你加2,你就跳过偶数。@WyattLowery我知道,但他在任何一个分支中都这样做。在这种情况下,你能做的最好的事情就是逐步使用调试器。如果你不知道如何使用调试器,现在是学习的时候了n、 为了找到第n个素数,首先需要找到之前的n-1个素数,这意味着您将知道所有的低素数,因此,在继续搜索第n个素数时,您可以通过记住这些n-1个素数并只检查它们来大大提高算法的性能。因此,我改为:int prime=2;int num=3;intsquare;boolean nonprime=false;while(primeimport java.util.Scanner;
public class NewNthPrime {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int t = in.nextInt();
        for(int a0 = 0; a0 < t; a0++){
            boolean flag = false;
            int n = in.nextInt();
            int[] prime = new int[n];
            prime[0] = 2;
            int i = 3,j=1;

            while(j<n){
                for(int y=0;y<prime.length;y++){
                    if(prime[y]==0){
                        break;
                    }
                    else if (i%prime[y]==0){
                       flag = true;
                       break;
                    }
                }
                if(!flag){
                   prime[j++]=i;
                }
                flag =false;
                i+=2;
            }
            System.out.println(prime[n-1]);
        }
    }
}