[英]Generating a random prime number in Java
我正在嘗試制作一個生成偽隨機數並檢查它是否為素數的程序。 然后程序將循環直到隨機數是素數。 但是,它並不總是打印質數。
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
}
}
這就是我的做法,但是請注意,如果您將大量數字輸入到此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
}
}
我認為有一種更簡單的方法來生成素數,雖然這個方法有點慢,但我認為這可能會有所幫助:
public class Prime_number_generator
{
public static int main()
{
int prime;
while (true)
{
int count = 0;
double x = Math.random();
double y = 10000 * x;
double z = Math.ceil(y);
prime = (int)z;
for (int i = 1; i <= prime; i++)
{
int modfactor = prime % i;
if (modfactor == 0)
{
count++;
}
}
if (count == 2)
{
break;
}
}
return prime;
}
}
我希望這對你有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.