我试图从命令行中取两个参数,第一个数字是起点,第二个是在此之后应该找到多少素数。我需要打印多次找到的素数,就像第二个命令参数所说的那样。我无法弄清楚如何让它运行正确的次数,然后找到素数。这是我尝试过的:
int values = Integer.parseInt(args[0]);
int loopAmount = Integer.parseInt(args[1]);
for (int i = 2; i <= loopAmount; i++) {
loopAmount++;
if (values % i != 0) {
values++;
System.out.println(i);
}
}
答案 0 :(得分:4)
你的主循环应该是这样的:
int start = Integer.parseInt(args[0]);
int count = Integer.parseInt(args[1]);
for (int candidate = start, i = 0; i < count; ++candidate) {
if (isPrime(candidate)) {
i++;
System.out.println(candidate);
}
}
我替换了变量名称,使其对目的更有意义。
在循环内部,isPrime
方法是您必须实现的方法:如果它接收的参数是素数,则返回true
,否则false
。
答案 1 :(得分:0)
如果我理解正确,你想从X开始找到N个素数。代码应该非常简单:
int X = Integer.parseInt(args[0]);
int N = Integer.parseInt(args[1]);
int C = 0;
while (C < N)
{
for(int i=2; i< X; i++)
{
if(X % i == 0){
X++;
continue;
}
}
System.out.println(X);
X++;
C++;
}
答案 2 :(得分:0)
优化版本:
// cache already found primes
final List<Integer> primes = new ArrayList<>();
/**
* Find {@code count} prime numbers starting at {@code start} inclusive
*/
public void findPrimes(int start, int count) {
for (int i = 2; count > 0; i++) {
if (isPrime(i) && i >= start) {
System.out.println(i);
count--;
}
}
}
private boolean isPrime(final int i) {
int sqrt = (int)Math.sqrt(i);
for (int prime : primes) {
if (i % prime == 0) {
return false;
}
if (prime > sqrt) {
break;
}
}
primes.add(i);
return true;
}