Java基础编程——输出[1,100]的所有质数
一、前言
目的要求:输出[1,100]的所有质数
相关技术:
1、java的for循环嵌套调用
2、Math的sqrt(Int)方法
···
基础功能:显示[1,100]的所有质数
二、编程
描述:100以内的所有质数的输出。
质数:素数,只能被1和它本身整除的自然数。–>从2开始,到这个数-1结束为止,都不能被这个数本身整除。
最小的质数是:2。
1、步骤一:编写最基本的功能
int count = 0;
//遍历[1,100]的数字
for(int figure = 1; figure <= 100; figure++){
//定义布尔值,(为了判断figure是否为质数,以此输出figure)
boolean isPrime=true;
//遍历判断figure是否为质数
for(int yinShu = 2; yinShu < figure; yinShu++){
//判断figure 有无因数(除了它本身和1这两个因数外),以此判断figure 是否为质数
if(figure % yinShu == 0){
isPrime = false;
}
}
//判断figure是否为质数,并且输出质数
if(isPrime){
System.out.print(figure + "\t");
count++;
//换行
if(count % 5 == 0){
System.out.println();
}
}
}
}
System.out.print("\n[1,100]内一共有" + count + "个质数");
2-1、步骤二:运用普通方法优化代码
(1)减少内循环(yinShu 的循环)的遍历次数:
Math.sqrt()为算术平方根,(y=m*n,则一定会有m和n其中一个小于或者等于y的平方根)
//优化二:只对本身是质数的自然数是有效的。
int k = (int)Math.sqrt(figure);
//内循环——yinShu
for(;figure <= k;){···}
(2)打断内循环(yinShu 的循环)的不必要的遍历次数:
//内循环——yinShu
for(;figure <= k;){···
if(figure % yinShu == 0){
isPrime = false;
break;//优化三:只对本身非质数的自然数是有效的
}
}
2-2、步骤二(额外):运用标签label优化代码
int count = 0;
//效率较高,但是较为全面
//label标签
label:for(int figure = 1; figure <= 1000; figure++){
//优化一:只对本身是质数的自然数是有效的。
int k = (int)Math.sqrt(figure);
//遍历判断
for(int yinShu = 2; yinShu <= k; yinShu++){
if(figure % yinShu == 0){
continue label;//优化二:只对本身非质数的自然数是有效的。
}
}
//输出质数
System.out.print(figure + "\t");
count++;
//换行
if(count % 10 == 0){
System.out.println();
}
}
System.out.print("\n[1,100]内一共有" + count + "个质数");
//获取当前时间距离1970-01-0100:00:00的毫秒数
long end = System.currentTimeMillis();
System.out.println("\n所花费的时间为" + (end - start) + "毫秒");
三、实现结果
四、总结
编写java项目或者某些功能:
我们需要先将最基本的功能编写出来并且正确执行出来;
然后,我们再进行优化。
五、额外的程序功能
//获取当前时间距离1970-01-0100:00:00的毫秒数
long start = System.currentTimeMillis();
//多条程序执行语句
···
···
//
long end = System.currentTimeMillis();
System.out.println("\n所花费的时间为" + (end - start) + "毫秒");
实现结果