我正在尝试创建一个生成伪随机数的程序,并检查它是否为素数。 然后程序将循环,直到随机数为素数。但是,它并不总是打印素数。
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
}
}
答案 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
希望对你有用。