我正在尝试计算素数,我已经完成了。但我想计算并打印第n个素数(用户输入),在计算其余部分(它们不会被打印)时,只打印第n个素数。这是我到目前为止所写的内容:import java.util.Scanner;/** * Calculates the nth prime number * @author {Zyst} */public class Prime { public static void main(String[] args) { Scanner input = new Scanner(System.in); int n, i = 2, x = 2; System.out.printf("This program calculates the nth Prime number\n"); System.out.printf("Please enter the nth prime number you want to find: "); n = input.nextInt(); for(i = 2, x = 2; i <= n; i++) { for(x = 2; x < i; x++) { if(i % x == 0) { break; } } if(x == i) { System.out.printf("\n%d is prime", x); } } }}这是我编写的计算从1到n的素数的程序。但是,我希望它只打印第n个素数,我想到的是在每次找到素数时都会对它进行某种计算和计算,当计数== n然后它打印出那个数字,但是我无法弄清楚如何降落它。
3 回答
富国沪深
TA贡献1790条经验 获得超9个赞
int counter = 0;
for(int i = 1; ; i++) {
if(isPrime(i)
counter++;
if(counter == userInput) {
print(i);
break;
}
}
编辑:你的主要功能可以使用一些工作。这是我写的一篇:
private static boolean isPrime(long n) {
if(n < 2)
return false;
for (long i = 2; i * i <= n; i++) {
if (n % i == 0)
return false;
}
return true;
}
注意 - 在查看因子时,您只需要达到sqrt(n),因此 i * i <= n
ABOUTYOU
TA贡献1812条经验 获得超5个赞
你试图在main方法中做太多。您需要将其分解为更易于管理的部分。编写一个方法boolean isPrime(int n)
,如果数字是素数则返回true,否则返回false。然后修改main方法以使用isPrime。
添加回答
举报
0/150
提交
取消