有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

素数序列

因此,我的程序所做的是读取用户输入,并打印出一系列素数,这些素数通向输入。例如,如果我输入20,序列应该打印出来 2. 5. 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) 个答案

  1. # 1 楼答案

    这是找到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 
    
  2. # 2 楼答案

    if (number < 2) return false;

    作为方法中的第一条语句,应该做到这一点

  3. # 3 楼答案

    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;
    }
    
  4. # 4 楼答案

    我就是这么做的:

    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;
    }
    }