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