如何确定一个数字是否为素数

sen*_*ter 3 java eclipse primes loops

好吧,我的问题不是如何弄清楚一个数字是否是素数,因为我认为我想出来了,但更多的是如何让它正确显示.

这是我的代码:

public static void main(String[] args) {
    // Declare Variables
    int randomNumbers = 0;
    int sum = 0;
    //Loop for number generation and print out numbers
    System.out.print("The five random numbers are: ");
    for (int i = 0; i <= 4; i++)
    {
        randomNumbers = (int)(Math.random()*20);
        sum += randomNumbers;

        if (i == 4) {
            System.out.println("and " + randomNumbers + ".");
        }
        else {
            System.out.print(randomNumbers + ", ");
        }
    }
    //Display Sum
    System.out.println("\nThe sum of these five numbers is " + sum + ".\n");

    //Determine if the sum is prime and display results
    for(int p = 2; p < sum; p++) {
        if(sum % p == 0)
            System.out.println("The sum is not a prime number.");
        else 
            System.out.println("The sum is a prime number.");
        break;
        }
    }


}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,如果数字最终是9,它会说它是一个素数,它不是.我认为问题是中断在一个循环后停止它所以它不是递增变量p所以它只测试除以2(我认为).但是如果我删除了断点,它将在每次传递中打印出"和/不是素数",直到它退出循环.不知道该怎么做.

小智 5

您找到数字是否为素数的方法是正确的方法.为了使它不会一直打印出数字是否为素数,你可以有一个外部变量,它代表数字是否为素数.

如

    boolean prime = true;
    for (int p = 2; p < sum; p++) {
        if (sum % p == 0) {
            prime = false;
            break;
        }
    }
    if (prime)
        System.out.println("The sum is a prime number.");
    else
        System.out.println("The sum is not a prime number.");
Run Code Online (Sandbox Code Playgroud)

通过这种方法,程序将假定数字为素数,直到它证明是错误的.因此,当它发现它不是素数时,它将变量设置为false并突破循环.

然后在循环结束后,您只需打印该数字是否为素数.

一种可以使这个循环更快的方法是从p = 2到p =和的平方根.所以使用这个方法你的for循环将如下所示:

    double sq = Math.sqrt((double)sum);
    for (int p = 2; p < sq; p++) {
        //Rest of code goes here
    }
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助


小智 5

你需要存储数字是否在循环外的布尔值中是素数:

//Determine if the sum is prime and display results
boolean isPrime = true;
for(int p = 2; p < sum; p++) {
    if(sum % p == 0){
        isPrime = false;
        break;
    }
}
if(isPrime){
   System.out.println("The sum is a prime number.");
} else {
   System.out.println("The sum is not a prime number."); 
}
Run Code Online (Sandbox Code Playgroud)