找到带循环的素数

时间:2015-02-11 00:25:03

标签: java loops primes joptionpane

我是Java的新手,我的作业是创建一个程序,用户输入一个数字,程序检查数字是否为素数。

我必须使用任何循环和JOptionPane进行输入。

我已经成功编写了这段代码并且有效:

import static javax.swing.JOptionPane.*;
public class Programmeringsoppgave5 {

    public static void main(String[] args) {
        int number = 0; 
        String readNumber = showInputDialog("Write a number and exit with ESC");

        while (readNumber != null){
        number = Integer.parseInt(readNumber);
            if (number != 0 && (number == 1 || number == 2)){
                System.out.println("Number " + readNumber + " is a prime number.");
            } else if (number % 2 == 0){
                System.out.println("Number " + readNumber + " is not a prime number.");
            } else if (number % 2 == 1){
                System.out.println("Number " + readNumber + " is a prime number.");
            }//end if-test
            readNumber = showInputDialog("Write a number and exit with ESC");
        }//end while    
    } //end method
}//end class

我想知道是否有更简单或更好的方法来编写这个程序?

1 个答案:

答案 0 :(得分:1)

要确保数字为素数,您需要查看它是否可以被下面的任何素数整除。

所以你可以做一些更像是你到目前为止找到的素数的ArrayList,它以硬编码的2开头。

然后,从3开始循环,然后测试每个新数字是否可被ArrayList中已有的任何素数整除。如果不是,则添加它并继续下一个。如果是,那么你就前进了。

您执行此操作直至找到相关号码。

您可以执行一些优化。例如,在检查作为当前数字因子的数字时,您只需要达到sqrt(currNum)。

如果你想获得幻想,你可以实施Eratosthenes筛选:http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes