输出100以内的质数

使用Java输出100以内的质数
代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package Homework;

public class Prime {
public static void main(String[] args) {
boolean isFlag = true;
for(int i = 2; i <= 100; i++){
for(int j = 2; j < i; j++){
if(i % j == 0)
isFlag = false;
}
if(isFlag == true)
System.out.println(i);
isFlag = true;//重置isFlag
}
}
}
```
### 对算法进行优化
- 优化之前
```java
package Homework;

public class Prime {
public static void main(String[] args) {
long begin = System.currentTimeMillis();
int count = 0;
boolean isFlag = true;
for(int i = 2; i <= 100000; i++){
for(int j = 2; j < i; j++){
if(i % j == 0)
isFlag = false;
}
if(isFlag == true)
count ++;
isFlag = true;//重置isFlag
}
long end = System.currentTimeMillis();
System.out.println("质数的个数为:"+ count);
System.out.println("花费时间为:" + (end - begin));
}
}
```
运行结果
![](优化前.png)
- 优化一:只对本身是非质数的自然数是有效的
```java
package Homework;

public class Prime {
public static void main(String[] args) {
long begin = System.currentTimeMillis();
int count = 0;
boolean isFlag = true;
for(int i = 2; i <= 100000; i++){
for(int j = 2; j < i; j++){
if(i % j == 0) {
isFlag = false;
break;//优化一
}
}
if(isFlag == true)
count ++;
isFlag = true;//重置isFlag
}
long end = System.currentTimeMillis();
System.out.println("质数的个数为:"+ count);
System.out.println("花费时间为:" + (end - begin));
}
}
```
运行结果:
![](优化一.png)
- 优化二:对于内层循环次数进行优化
```java
package Homework;

public class Prime {
public static void main(String[] args) {
long begin = System.currentTimeMillis();
int count = 0;
boolean isFlag = true;
for(int i = 2; i <= 100000; i++){
//将内层循环的次数从i变为根号i
for(int j = 2; j < Math.sqrt(i); j++){
if(i % j == 0) {
isFlag = false;
break;//优化一
}
}
if(isFlag == true)
count ++;
isFlag = true;//重置isFlag
}
long end = System.currentTimeMillis();
System.out.println("质数的个数为:"+ count);
System.out.println("花费时间为:" + (end - begin));
}
}

运行结果:

可见,学好数据结构与算法的重要性