控制流程获取1-100以内的质数质数

控制流程获取1-100以内的质数质数:素数,只能被1和自身整除分析:只能被1和自身整除,就可以在循环体内的取值时将1和自身去除,剩下的数逐一遍历,如果没有能够整除的就为质数for (int i=2;i<=100 ;i++ )
{
boolean isFlag=true;
for (int j=2;j<i ;j++ )
{
if (i%j0)
{
isFlag=false;
}
}
if (isFlag
true)
{
System.out.println(i);
}
}在外部定义一个isFlag=true,如果在for循环过程中,被整除了就将isFlag=false,如果外部for循环一次isFlag=false未被执行,说明i不能整除其他的数,也就是质数注意:isFlag要定义在循环体内,如果定义在for循环体外,就需要在循环体执行一次后再次将isFlag重置为true,否则如果有一次在for循环内变成了false,那么在接下来的循环中,无论if语句是否被执行,isFlag已经变成了false,所以在最后的输出if语句都是fasle,就是定义在这里输出的结果就是2、3这个代码可以进行优化:有两个地方可以优化:1、在循环体的内部循环中,如果isFlag=false被执行之后,这就说明这个数除了1和自身之外还能整除其他数,肯定不是质数,就不必要再继续往下遍历for (int i=2;i<=100 ;i++ )
{
boolean isFlag=true;
for (int j=2;j<i ;j++ )
{
if (i%j0)
{
isFlag=false;
break;//只要有一个可以除尽,那么肯定不是质数,则不再进行接下里的运算
//只对非指数起效果
}
}
if (isFlag
true)
{
System.out.println(i);
}
}2、在内部for循环的 j 循环次数的取值上可以优化,如果在根号 i 之前还没有可以整除的自然数,那么就说明接下来的数字也没有能够被整除的自然数,就不必往下继续遍历在根号的使用中,就需要使用Math类中的sqrt方法Math.sqrt(i);for (int i=2;i<=100 ;i++ )
{
boolean isFlag=true;
for (int j=2;j<=Math.sqrt(i) ;j++ )
{
if (i%j0)
{
isFlag=false;
break;//只要有一个可以除尽,那么肯定不是质数,则不再进行接下里的运算
//只对非指数起效果
}
}
if (isFlag
true)
{
System.out.println(i);
}
}为了能够看出优化之后的效果,我们可以通过运行代码使用的时间来显示查看时间就需要使用System.currentTimeMillies()方法,获得的是从当前时间到1970-01-01 00:00:00的毫秒数,所以采用的是long数据类型接收long start=System.currentTimeMillies();
long end=System.currentTimeMilles();
long time=end-start因为是1-100的质数,所以时间可能差别不是很大,为了更加全面的表现出来,可以定义一个变量count,赋值为0,用来接收非质数遍历的次数int count=0;
for (int i=2;i<=100 ;i++ )
{
boolean isFlag=true;
for (int j=2;j<=Math.sqrt(i) ;j++ )
//for (int j=2;j<i ;j++ )
{
if (i%j0)
{
isFlag=false;
break;//只要有一个可以除尽,那么肯定不是质数,则不再进行接下里的运算
//只对非指数起效果
}else{
count++;
}
}
if (isFlag
true)
{
System.out.println(i);
}
}
long end=System.currentTimeMillis();
long time=end-start;
System.out.println(count);
System.out.println(“所耗费的时间”+time+“ms.”);运行的结构优化前后的比较//break:1059     不加break:4568   加break、Math.sqrt:162
//break:9ms     不加break:15ms 加break、Math:4msbreak和continue关键字break和continue关键字的使用
使用范围:循环中使用的作用break:switch-case
循环结构中 结束当前循环
continue:
循环结构中 结束当次循环for (int i=1;i<=10 ;i++ )
{
if (i%40)
{
System.out.print(“you”);
//break;//123
continue;//123567910
}
System.out.print(i);
}相同点:都在循环结构中使用关键字后面不可以声明执行语句循环结构中break默认是跳出最近的一层循环continue默认是执行跳出一次最近一层循环体break和continue也可以跳出指定的循环体只需要在想要跳出的循环体之前添加一个标签,然后在break或continue使用时指定标签就行lable:for (int i=1;i<=10 ;i++ )
{
inlable:if (i%4
0)
{
System.out.print(“you”);
break;//跳出inlable
continue;//跳出一次inlable
break lable;//跳出lable
continue;//跳出一次lable
}
System.out.print(i);
}补充:在上面的质数代码中,也可以采用指定跳出循环的方法来改写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牧码文

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值