黑马程序员技术交流社区

标题: java基础求素数 [打印本页]

作者: 914360849    时间: 2015-5-26 21:47
标题: java基础求素数
/*
求1-100之间的所有素数。
素数:只能被1和自身整除的数。1不是素数。
*/
class  SuShuTest
{
public static void main(String[] args)
{
  
  method1();
}
public static void method1()
{
  w:for(int a=2;a<100;a++)
  {
    System.out.println(a+"*");
   for(int i=2;i<=a/2;i++)//for(int i=2;i<a;i++)
   {
    if(a%i==0)
     continue  w ;//跳出内部的for循环,执行外循环
        //的a++,
   
   }
   System.out.println(a);
  }
}
//定义方法2
public static void method2()
{
  //w:for(int a=2;a<100;a++)
  for(int a=2;a<100;a++)
  {
   //System.out.println(a+"*");
   boolean flag=true;
   for(int i=2;i<=a/2;i++)//for(int i=2;i<a;i++)
   {
    if(a%i==0)
    {
    flag=false;break;
    }
      
   
   }
    if(flag)
   System.out.println(a);
  }
}
}


作者: 小水    时间: 2015-5-26 21:51
感谢分享。。
作者: 307323665    时间: 2015-5-28 10:16
怎么看,怎么觉得有问题呢??
作者: 307323665    时间: 2015-5-28 10:23
大神,我错了!看错一个符号,谢谢分享
作者: 曲终烟尽    时间: 2015-5-28 10:51
本帖最后由 曲终烟尽 于 2015-5-28 10:56 编辑

public static void method1()
{
  w:for(int a=2;a<100;a++)
  {
    //System.out.println(a+"*");  去掉这一句
   for(int i=2;i<=a/2;i++)
   {
    if(a%i==0)
     continue  w ;//这个continue w语句 从你这学习了。刚百度完,这个continue w,会直接跳出当前for循环接着执行w标号的外循环for,如果不加标号就会直接跳出当前循环的当前步骤,重新进入当前循环继续执行。//这里可以直接改成 break;  舍去 continue w;  因为别人看代码会找这个标号w在哪,如果代码很多的话会容易看晕。break直接就跳出当前for循环继续执行了。效果一样样的。!
   }
   System.out.print(a+"\t");//改成制表符输出,看起来很舒服。。
  }
}

作者: BlueSun    时间: 2015-5-28 19:53
前几天刚做完~~~~又复习了
作者: 13699266500    时间: 2015-5-28 20:51
学习了!!!
作者: lanlianhuashi    时间: 2015-5-29 07:24
再补充一种,更高效的。如果用一半的话,100/2=50,循环判断的临界值为50。若用Math.sqrt(100)=10,循环的临界值为10.减少无用的判断。
for(int i=2;  i<100;  i++){
    boolean con = true;
    for(int j=2;  j<=Math.sqrt(i); j++){
           if(i%j==0){
              con =false;
              break;
          }
    }
    if(con){
         System.out.println(i+"是素数");
    }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2