A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 914360849 中级黑马   /  2015-5-26 21:47  /  981 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
求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);
  }
}
}

8 个回复

正序浏览
再补充一种,更高效的。如果用一半的话,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+"是素数");
    }
}
回复 使用道具 举报
学习了!!!
回复 使用道具 举报
前几天刚做完~~~~又复习了
回复 使用道具 举报
本帖最后由 曲终烟尽 于 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");//改成制表符输出,看起来很舒服。。
  }
}
回复 使用道具 举报
大神,我错了!看错一个符号,谢谢分享
回复 使用道具 举报
怎么看,怎么觉得有问题呢??
回复 使用道具 举报
感谢分享。。

点评

你这贴太水了。。。  发表于 2015-5-28 10:57
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马