Java:找出1~100之间的质数。
由以上的定义我们可以延伸出另一种解释:这个数与除1之外小于它的数取余不为0,则这个数为质数。那么由此分析,解决这个问题需要用到循环结构,且需要嵌套。
定义i表示“这个数”,定义j表示“小于它的数”,在判断之前我们需要先遍历1~100之间所有的数,所以第一层循环即以“这个数”作为循环条件,第二层循环我们需要完成的工作是让所有“小于它的数”与之取余,如果等于0,则不是质数,都不为0,则为质数。有了这个思路,我们可以写出以下代码:
class TestLoopNest{
public static void main(String[] args){
boolean b = true;//用来表示“这个数”是否为质数
for(int i = 2;i <= 100;i ++){//100以内数的遍历
//判断其是否为质数
for(int j = 2;j < i;j ++){
if(i % j == 0){
b = false;
}
}
if(b){//如果b为true,则输出i
System.out.println(i);
}
b = true;//当判断完一个数之后,b的值重新赋成true
}
}
}
实现结果如下:
验证后无误。
【拓展】这种方法对于查找100以内的质数来说还是可以的,但是如果将100改成10000,100000,甚至是1000000呢?那么这种方式还是否同样好用呢?于是我做了如下尝试,将100改成10000,并在代码中添加时间计数器,看最后程序运行完毕需要的时间是多少。
class TestLoopNest{
public static void main(String[] args){
boolean b = true;
long start = System.currentTimeMillis();//获取系统当前累计毫秒数
for(int i = 2;i <= 10000;i ++){
for(int j = 2;j < i;j ++){
if(i % j == 0){
b = false;
}
}
if(b){
System.out.println(i);
}
b = true;
}
long end = System.currentTimeMillis();//再次获取当前累计毫秒数
System.out.println("所花费的时间为" + (end - start) + "毫秒");
}
}
运行结果如下:
这仅仅只是将100改为了10000,运行效率就低了很多,当然代码运行效率与硬件也有关,身为程序员的我们为何不从根源上让代码更加简洁、轻便呢?如何提高效率,更好的解决问题,请查看我的第二篇文章。