2021-07-10

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) + "毫秒");

实现结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值