黑马程序员技术交流社区
标题:
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