簡體   English   中英

在 Java 中生成隨機素數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM