中间被我注释掉的for循环是我的想法
可是我查了查,人家说只需要算到i的平方根就可以了。于是没注释掉的部分就出现了
可是这样计算出来的不正确,求解
//2。输出a 到 b之间的素数
public static void primeNumber(int primeA,int primeB){
//如果前面那个数比后面那个数大,那么调换位置,以后可以改成让用户输入的
if(primeA>primeB){
int temp=primeA;
primeA=primeB;
primeB=temp;
}
//在循环外定义
int i,j;
for(i=primeA;i<primeB+1;i++){
//据说只需要让j<Math.sqrt(i)就可以了,不知道为什么好像素数就这样
/*
for(j=2;j<i;j++){
if(i%j==0)
break;
}
*/ for(j=2;j<Math.sqrt(i);j++){
if(i%j==0)
break;
}
//判断是否循环到最后,也可以在大循环外加个判断boolean flag=false;
if(i==j)
System.out.println(i+" 是一个素数");
}
}
可是我查了查,人家说只需要算到i的平方根就可以了。于是没注释掉的部分就出现了
可是这样计算出来的不正确,求解
//2。输出a 到 b之间的素数
public static void primeNumber(int primeA,int primeB){
//如果前面那个数比后面那个数大,那么调换位置,以后可以改成让用户输入的
if(primeA>primeB){
int temp=primeA;
primeA=primeB;
primeB=temp;
}
//在循环外定义
int i,j;
for(i=primeA;i<primeB+1;i++){
//据说只需要让j<Math.sqrt(i)就可以了,不知道为什么好像素数就这样
/*
for(j=2;j<i;j++){
if(i%j==0)
break;
}
*/ for(j=2;j<Math.sqrt(i);j++){
if(i%j==0)
break;
}
//判断是否循环到最后,也可以在大循环外加个判断boolean flag=false;
if(i==j)
System.out.println(i+" 是一个素数");
}
}
随便改了下 label1:
for(i=primeA;i<primeB+1;i++){
if(i==1){
continue label1;
}else if(i==2){
System.out.println(i+" 是一个素数");
}
for(j=2;j<Math.sqrt(i)+1;j++){
if(i%j==0)
continue label1;
}
System.out.println(i+" 是一个素数");
}
int i,j;
for(i=primeA;i<primeB+1;i++){
//加个开关
boolean flag=true;
for(j=2;j<(int)Math.sqrt(i);j++){
if(i%j==0){
flag=false;//关上开关
break;
}
}
//System.out.println(flag);
if(flag==true)
System.out.println(i+" 是一个素数");
}