在Java中生成随机素数

时间:2014-06-03 02:21:26

标签: java primes

我正在尝试创建一个生成伪随机数的程序,并检查它是否为素数。  然后程序将循环,直到随机数为素数。但是,它并不总是打印素数。

  public class Prime_Number_Generator {

            public static void main(String[] args) {

                int[] primesList = {2, 3, 5, 7, 11, 13, 17, 19}; // list of known primes
                int num = 0;
                int i = 0;
                int counter = 1;
                Random rand = new Random(); // generate a random number


                while (i != counter) {          
                    num = rand.nextInt(1000) + 1;

                    if (num % primesList[i] == 0)  // check if num is evenly divisible by a prime from the list
                       i++;

                    }
                    else { // if it is prime exit loop
                        i = 0;
                        counter = 0;
                    }
                 }
                 System.out.println(num);  // print the number

    }
}

2 个答案:

答案 0 :(得分:2)

我就是这样做的,但请注意,如果你在这个isPrime方法中输入大数字,它将开始滞后。每当您的代码出错时,请尝试进行单元测试(测试代码的一小部分)。这样您就可以轻松找到并修复代码错误,这就是为什么我 高度 建议使用某种类型的isPrime方法,而不是main方法中的所有代码。

public class Prime_Number_Generator {
    public static void main(String[] args) {
        int num = 0;
        Random rand = new Random(); // generate a random number
        num = rand.nextInt(1000) + 1;

        while (!isPrime(num)) {          
            num = rand.nextInt(1000) + 1;
        }
        System.out.println(num);  // print the number
    }

    /**
     * Checks to see if the requested value is prime.
     */
    private static boolean isPrime(int inputNum){
        if (inputNum <= 3 || inputNum % 2 == 0) 
            return inputNum == 2 || inputNum == 3; //this returns false if number is <=1 & true if number = 2 or 3
        int divisor = 3;
        while ((divisor <= Math.sqrt(inputNum)) && (inputNum % divisor != 0)) 
            divisor += 2; //iterates through all possible divisors
        return inputNum % divisor != 0; //returns true/false
    }
}

答案 1 :(得分:0)

我认为有一种更简单的方法来生成素数,虽然这个方法有点慢,但我认为这可能会有所帮助:

true

希望对你有用。