打印2到10000的所有素数,每行显示8个素数~
import java.util.*;
public class Prime { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int count=1;
int number=2;
boolean isPrime=true;
for(number=2;number<10000;number++){
for(int divisor=2;divisor<=number/2;divisor++){
if(number%divisor==0){
isPrime=false;
break;
}
if(isPrime){
if(count%8==0){
System.out.print(number);
}else{
System.out.print(number+" ");
count++;
}
number++;
}
}
}
}
我运行之后没有显示结果,一片空白,麻烦高人帮我指点
import java.util.*;
public class Prime { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int count=1;
int number=2;
boolean isPrime=true;
for(number=2;number<10000;number++){
for(int divisor=2;divisor<=number/2;divisor++){
if(number%divisor==0){
isPrime=false;
break;
}
if(isPrime){
if(count%8==0){
System.out.print(number);
}else{
System.out.print(number+" ");
count++;
}
number++;
}
}
}
}
我运行之后没有显示结果,一片空白,麻烦高人帮我指点
public class Prime { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int count=0;
int number=2;
boolean isPrime;
for(number=2;number <10000;number++){
isPrime = true;
for(int divisor=2;divisor <=number/2;divisor++){
if(number%divisor==0){
isPrime=false;
break;
}
}
if(isPrime){
System.out.print(number + "\t");
count++;
if (count % 8 == 0) {
System.out.println();
}
}
}
}
}
在这段程序里,请问楼主自从给"isPrime"赋过初始值"true",在循环里一直都只是赋"false",也就是说头一次运行到第二个for循环,此时number=4,divisor=2,number%divisor=0,所以此时isPrime=false。从这以后,isPrime的值一直都是false(因为没有等于true的赋值语句)。
所以肯定是不可能显示出你想要的结果的。
//只用比较到number的算术平方根就可以了,这样可以大量的节省资源,当number很大时
for(int divisor=2;divisor <=Math.sqrt(number);divisor++){
if(number%divisor==0){
isPrime=false;
break;
}
}
其实程序还可以优化 divisor++ 不用 2个for循环都用 divisor=1;divisor <=Math.sqrt(number);divisor+=2){
效率提高4倍