gpt4 book ai didi

java - 查找第 10001 个质数 - 代码未返回正确的数字

转载 作者:行者123 更新时间:2023-12-01 07:24:29 25 4
gpt4 key购买 nike

为了避免任何误解,我是新来的,而且还是 Java 的初学者。我正在尝试编写一个代码来打印第 10,001 个素数。该代码当前检查该数字是否可以被数字 2-9(含)整除,然后检查该数字的平方根是否为整数。

public static void main(String[] args){
Integer Num , Counter;
Double Sqrt; //square root
Num=8;
Counter=4 ;
while(Counter<10001){
Num++;
if ((Num%2!=0) && (Num%3!=0) && (Num%4!=0) && (Num%5!=0) && (Num%6!=0) && (Num%7!=0) && (Num%8!=0) && (Num%9!=0)){
Sqrt = Math.sqrt(Num);
if(Sqrt%1!=0){
Counter++;
}
}
}

System.out.println(Num);
}
}

编辑:

我对其进行了更改,以便它不再使用错误的定义,但是使用这个新代码没有输出,并且我没有看到循环有任何问题。我还将尝试下面的其他建议,但想知道如何解决此问题。

 public static void main(String[] args)
{
int Num , Counter;
double Sqrt; //square root
Num=1;
Counter=0 ;

while(Counter<10001){
Num++;
Sqrt = Math.sqrt(Num);
int i = (int)Sqrt;
while(i>1){
if(Num%i==0){ //if the number is divisible then the loop is terminated and next number is tested
i=0;
}
i--;
}

if(i==1){
Counter++;
}
}

System.out.println(Num);
}
}

谢谢。

最佳答案

你的逻辑有问题。例如,当检查数字 143 时,您的代码认为它是素数。然而,11*13 = 143,所以它实际上不是素数。我建议创建一个素数列表并通过该列表执行 for-each 循环。

List<Integer> primes = new ArrayList<Integer>();
int number = 2;
while (primes.size() < 10001) {
boolean isPrime = true;
for (Integer prime : primes) {
if (number % prime == 0) {
isPrime = false;
break;
}
}
if (isPrime) {
primes.add(number)
}
number++;
}
System.out.println(primes.get(10000));

这可能不是一个快速的解决方案,但它应该可以工作......但没有测试。祝你好运:)。

关于java - 查找第 10001 个质数 - 代码未返回正确的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27728058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com