/**
* 100000 以内所有质数的效率对比
* 质数不同效率
* 质数:只能被1和它本身整除的自然数。
*/
public class PrimeNumberTest {
/**
* 常用方式
* 耗时:24189ms
*/
@Test
public void test1() {
long start = System.currentTimeMillis();
boolean isFlag = true;
for (int i = 1; i <= 100000; i++) {
for (int j = 2; j < i - 1; j++) {
if (i % j == 0) {
isFlag = false;
}
}
if (isFlag) {
System.out.println(i);
}
isFlag = true;
}
long stop = System.currentTimeMillis();
System.out.println("用时 = " + (stop - start));
}
/**
* 优化 if判断中添加break
* 耗时:2352ms
*/
@Test
public void test2() {
long start = System.currentTimeMillis();
boolean isFlag = true;
for (int i = 1; i <= 100000; i++) {
for (int j = 2; j < i - 1; j++) {
if (i % j == 0) {
isFlag = false;
break;
}
}
if (isFlag) {
System.out.println(i);
}
isFlag = true;
}
long stop = System.currentTimeMillis();
System.out.println("用时 = " + (stop - start));
}
/**
* 优化 if判断中添加break 要判断的数开方
* 耗时:106ms
*/
@Test
public void test3() {
long start = System.currentTimeMillis();
boolean isFlag = true;
for (int i = 1; i <= 100000; i++) {
int k = (int)Math.sqrt(i);//开方
for (int j = 2; j <= k; j++) {
if (i % j == 0) {
isFlag = false;
break;
}
}
if (isFlag) {
System.out.println(i);
}
isFlag = true;
}
long stop = System.currentTimeMillis();
System.out.println("用时 = " + (stop - start));
}
/**
* 优化 不要打印 打印占用资源也多
* 耗时:15ms
*/
@Test
public void test4() {
long start = System.currentTimeMillis();
int count = 0;// 记录质数个数
boolean isFlag = true;
for (int i = 1; i <= 100000; i++) {
int k = (int)Math.sqrt(i);
for (int j = 2; j <= k; j++) {
if (i % j == 0) {
isFlag = false;
break;
}
}
if (isFlag) {
count++;
}
isFlag = true;
}
long stop = System.currentTimeMillis();
System.out.println("用时 = " + (stop - start));
System.out.println("质数的个数 = " + count);
}
/**
* 优化 使用循环标签
* 耗时:15ms
*/
@Test
public void test5() {
long start = System.currentTimeMillis();
int count = 0;// 记录质数个数
label:
for (int i = 1; i <= 100000; i++) {
int k = (int) Math.sqrt(i);
for (int j = 2; j <= k; j++) {
if (i % j == 0) {
continue label;
}
}
count++;
}
long stop = System.currentTimeMillis();
System.out.println("用时 = " + (stop - start));
System.out.println("质数的个数 = " + count);
}
}