我的代码遇到了一些问题。我试图写一个方法,输出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
答案 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);
}
}
}
如果你想在这段代码中提到break
或isPrime
标志这里是一个非常好的答案,解释为什么这两种方法都可以使用,更多的是风格避免复杂的外观条件