以输出质数的两种形式为例进行程序的优化
题目要求
规定在1-100000范围内,输出所有的质数的个数,并尽量提高运算效率。
质数定义:只能被1和自己整除的数。
需要用到的结构
1、对计算开始和计算结束的时间节点赋值
long start = System.currentTimeMillis();
long end = System.currentTimeMillis();
2、取一个数(i)的开平方值
int j = Math.sqrt(i);
3、使用带标签的continue/break
label1:for(int i = 1;i <= 4;i++){
label2:for(int j = 1;j <= 4;j++){
if(i / j == 3){
break label1;
}
}
}
实现功能的代码
class PrimeNumTest{
public static void main(String[] args) {
long start = System.currentTimeMillis();
boolean isFlag = true;
int count = 0;
for(int i = 2;i <= 100000;i++){
for(int j = 2;j <= i-1;j++){
if(i % j == 0){
isFlag = false;
break;
}
}
if(isFlag == true){
count++;
}
isFlag = true;
}
long end = System.currentTimeMillis();
System.out.println("所花的时间为" + (end - start));
System.out.println("质数的个数为" + count);
System.out.println("by Asuka Truth");
}
}
输出结果
优化
1.缩小除数j的取值范围
2.使用带标签的continue简化
优化后代码
class PrimeNumTest2{
public static void main(String[] args){
int count = 0;
long start = System.currentTimeMillis();
label1:for(int i = 2;i <= 100000;i++){
label2:for(int j = 2;j <= Math.sqrt(i);j++){//1.缩小除数j的取值范围
if(i % j == 0){
continue label1;//2.使用带标签的continue简化
}
}
count++;//2.使用带标签的continue简化
}
long end = System.currentTimeMillis();
System.out.println("所花的时间为" + (end - start));
System.out.println("质数的个数为" + count);
System.out.println("by Asuka Truth");
}
}
优化后输出结果
联系方式
发现错误或想提出建议欢迎联系我
Email:AsukaTruth@163.com