黑马程序员技术交流社区
标题:
资深大神求解释
[打印本页]
作者:
aiq黑马程序员
时间:
2014-7-2 11:22
标题:
资深大神求解释
for (j=2;j<=100;j++)
{ for ( i=2;i<=j;i++ )
if ( j%i==0)
breaker;
}
if (i>j/2)
{
System.out.println(""+j+"是素数");
}
if(i>j/2)这句作用是什么?为什么感觉这句是废话啊?谁能把这句解释一下啊?
作者:
I'm_permanent.
时间:
2014-7-2 16:53
是为了排除i和j都等于2的情况吧
作者:
寐海流风
时间:
2014-7-2 17:09
System.out.println("2是素数");
for(int j=2;j<=100;j++){
for (int i=2;i<j;i++ ){
if (j%i==0)
break;
if (i>j/2){
System.out.println(j+"是素数");
break;
}
}
}
修改了你的代码,完整的输出了100以内的素数;
i>j/2的意思是:比如97,当除到49的时候,都没有发现2-49有哪个数是97的因素,就说明97是质数了;因为如果97除一个值是自己1/2的数能整除,那必然商是2.
附自己以前实现的一个方法,给你参考下:
//打印质数
public static void printPrimeNumber(){
System.out.println(2);
for(int x=3;;x+=2){
int sqrt = (int) Math.sqrt(x)+1;
int count = 0;
out:
for(int y=3;y<sqrt;y++){
if(x%y==0){
count++;
break out;
}
}
if(count==0)
System.out.println(x);
}
}
作者:
wuguiye
时间:
2014-7-2 17:31
这句话是不能省略的, i>j/2 时才能说明这个 j 是素数,觉得这样写程序会不方便阅读。举个例子,11是个素数,我只需要在2--5找,看能不能找到整除11的数,找不到就说明11是素数。
作者:
wuguiye
时间:
2014-7-2 17:35
不过这样写程序不是很好,不方便人家阅读,给你我写的程序吧,这是今早的面试程序题,只能帮你到这里了
public class SushuTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//输出1到10之间的素数
sushu(1,10);
}
public static void sushu(int a,int b) {
boolean flag ;
for (int i = a; i < b; i++) {
flag= true; //一开始假设i是素数
if(i==1) flag=false;
for (int j = 2; j <= i / 2; j++) {
if (i % j == 0) {
flag = false; //能够被其他数整除,不是素数
break;
}
}
if (flag)
System.out.println(i); //输出素数
}
}
}
作者:
fantacyleo
时间:
2014-7-2 17:39
楼主的代码有bug,我猜你是这个意思吧:
for (j=2;j<=100;j++) {
for ( i=2;i<j;i++ )
if ( j%i==0)
break;
if (i>j/2)
{
System.out.println(""+j+"是素数");
}
}
复制代码
出了内层循环的时候,无法确定到底是break出来的,还是正常走完循环出来的,if(i>j/2)就是用来判断这个的。因为j>3时,j/2>=sqrt(j),所以如果i>j/2,i>sqrt(j),那么就不可能是break跳出来的。因为如果是break出来的,那么j/i一定比i小,而且j % (j/i) == 0,根本到不了i就应该break出循环了。既然不是break出来的,那么就说明是素数,反之不是素数。
作者:
小周务商
时间:
2014-7-2 20:43
大哥。能不能把代码写工整一点呢。
作者:
aiq黑马程序员
时间:
2014-7-3 14:57
小周务商 发表于 2014-7-2 20:43
大哥。能不能把代码写工整一点呢。
我主要是问那一句的意思,没来得及把代码打全,请见谅
作者:
aiq黑马程序员
时间:
2014-7-3 14:58
谢谢大家了,
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2