获取质数
通过一个简单的例子,初窥算法
质数(素数):只能被自己和1整除
第一种情况没做任何优化,耗时17583毫秒
long start = System.currentTimeMillis();
int count = 0;
for (int i = 2; i <= 100000; i++) {
boolean isFlag = false; //
for (int j = 2; j < i; j++) {
if (i % j == 0) {
isFlag = true;
}
}
if (!isFlag) {
count++;
}
}
long end = System.currentTimeMillis();
System.out.println("有" + count + "个质数");
System.out.println("所花费的时间为:" + (end - start));
第二种情况在第一个判断中break, 耗时1621毫秒
long start = System.currentTimeMillis();
int count = 0;
for (int i = 2; i <= 100000; i++) {
boolean isFlag = false; //
for (int j = 2; j < i; j++) {
if (i % j == 0) {
isFlag = true;
break;
}
}
if (!isFlag) {
count++;
}
}
long end = System.currentTimeMillis();
System.out.println("有" + count + "个质数");
System.out.println("所花费的时间为:" + (end - start));
第三种情况为被除开根号,只校验最小因子, 耗时15毫秒
long start = System.currentTimeMillis();
int count = 0; //
lable1:for (int i = 2; i <= 100000; i++) {
for (int j = 2; j <= Math.sqrt(i); j++) {
if (i % j == 0) {
continue lable1;
}
}
count++;
}
long end = System.currentTimeMillis();
System.out.println("有"+count+"个质数");
System.out.println("所花费的时间为:" + (end - start));