输出素数 - Java

时间:2015-07-11 02:03:53

标签: java

我的代码遇到了一些问题。我试图写一个方法,输出2-10,000的所有素数。我还是java的初学者,我不知道如何去做,我知道我会使用二进制搜索方法和循环来做到这一点。我试着按照我在教科书和网上阅读的例子;这就是我提出的,但它不能正常工作。我不确定它是否完全正确。任何有关如何进行此操作或修复此问题的帮助或建议将不胜感激。

public static void prime() {
    int i;   // variable for loop

    for(i=2; i<=10000; i++)
    {
        int factors =0;
        int j = 1;

        while(j<=i)
        {
            if(i%j == 0)
            { 
                factors++;
            } //End if
            j++;
        } 

        if(factors == 2)
        {
            System.out.println(i);
        } //End if
    }// End for
} // End method prime

2 个答案:

答案 0 :(得分:1)

考虑素数意味着什么:一个只能被1和它本身整除的数字。使用该定义,您可以编写一个更有效的代码片段,检查当前数字是否可以被1和1以外的数字整除,即2。

答案 1 :(得分:0)

您可以做的一项改进是,如果某个数字超过两个因素,则在达到第二个循环的限制之前,如果它是素数则停止测试

public static void printPrimes()
{
    int i;   
    boolean isPrime ;

    for(i=2; i<=10000; i++)
    {
        int factors ;
        int j ;

        factors = 1 ;
        isPrime = true ;

        for(j = 2; isPrime && j <= i; j++)
        {
            if(i%j == 0)
            { 
                factors++;
            } 

            if(factors > 2)
            {
                isPrime = false ;
            }
        } 

        if(isPrime)
        {
            System.out.println(i);
        } 
    }

} 

如果你想在这段代码中提到breakisPrime标志这里是一个非常好的答案,解释为什么这两种方法都可以使用,更多的是风格避免复杂的外观条件

Is it bad practice to use break to exit a loop in java?