素数序列Java

时间:2017-09-02 16:46:57

标签: java

所以我的程序所做的是它读取用户输入并打印出一系列导致输入的素数。因此,例如,如果我输入20,则序列应该打印出来 2 五 7 ...等 直到达到19(因为20不是素数) 唯一的问题是当我运行程序时1继续打印出来。这是我弄清楚数字是否为素数的方法。

 public boolean isPrime(int number)
{  
    int prime;
    for(prime = 2; prime < number; prime++)
    { 
      if (number % prime == 0)
      { 
          if(number == 1)
          { 
              return false; 
          }
       return false;
      }
    }
    return true;
}

我已阅读多个论坛和解决方案,似乎没有任何帮助。我完全陷入困境。

4 个答案:

答案 0 :(得分:1)

if (number < 2) return false;

作为你方法的第一个语句应该可以解决问题。

答案 1 :(得分:0)

number1时,您的循环永远不会输入(您的循环将从2开始)。在循环之前移动测试,并且在循环之后永远不要使用prime - 所以我将它放在循环的本地。

public boolean isPrime(int number) 
{
    if (number == 1) 
    {
        return false;
    }
    for (int prime = 2; prime < number; prime++)
    {
        if (number % prime == 0) 
        {
            return false;
        }
    }
    return true;
}

您可能会稍微优化一下,例如 - 消除所有低于2的值(建议为@luk2302)和一些数学消除偶数值并仅测试平方根。

public boolean isPrime(int number) {
    if (number < 2) {
        return false;
    } else if (number == 2 || number == 3) {
        return true;
    } else if (number % 2 == 0) {
        return false;
    }
    double sq = Math.sqrt(number);
    for (int prime = 3; prime <= sq; prime += 2) {
        if (number % prime == 0) {
            return false;
        }
    }
    return true;
}

答案 2 :(得分:0)

这是查找1到n之间的素数的简单方法。 希望它清楚。

int  n=20;
System.out.println("All Prime Numbers Between 1 to "+n);
boolean isPrime;

for (int i = 2; i <= n; i++) {
    isPrime = true;
    for (int j = 2; j <=Math.sqrt(i); j++) {
        if (i % j == 0) {
            isPrime = false;
            break;
        }
    }

    if (isPrime)
        System.out.print(i + " ");
}

输出继电器 -

All Prime Numbers Between 1 to 20
2 3 5 7 11 13 17 19 

答案 3 :(得分:0)

这就是我所做的:

package CH10;

public class PrimeSequence implements Sequence {
private int n = 2;

public int next() {
    if (isPrime(n)) {
        int primeN = n;
        n++;
        return primeN;
    } else {
        n = nextPrime(n);
        int primeN = n;
        n++;
        return primeN;
    }
}

private boolean isPrime(int n) {
    boolean test = true;
    if (n == 2 || n == 3) {
        test = true;
    } else if (n % 2 == 0 || n % 3 == 0 || isPerfectSquare(n)) {
        test = false;
    } else if (isMultipleOfPrime(n)) {
        test = false;
    }
    return test;
}

private int nextPrime(int n) {
    while (!isPrime(n)) {
        n++;
        nextPrime(n);
    }
    return n;
}

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

    if (Math.pow(sqrt, 2) == n) {
        return true;
    }
    return false;
}

private boolean isMultipleOfPrime(int n) {
    boolean test = false;
    for (int i = (int) Math.sqrt(n); i > 3; i--) {
        if (n % i == 0) {
            test = true;
        }
    }
    return test;
}
}