判断素数的最高效方法

比较两种算法判断素数的效率。

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
package com.gxnu.study.primer;

public class {
public static void main(String[] args) {
FilterPrime fp = new FilterPrime();

long two = System.nanoTime();
fp.prime2(357);
System.out.println("+-的时间:"+(System.nanoTime()-two));
long one = System.nanoTime();
fp.prime(357);
System.out.println("%的时间:"+(System.nanoTime()-one));

}

public void prime2(int num){
if (num<2) {
System.out.println("输入的数据不合法!");
return;
}

int arr[] = new int[num+1];

for (int i = 0; i < arr.length; i++) {
arr[i] = i;
}

for (int i = 2; i < arr.length-1; i++) {
while(arr[i]==0){
i++;
}
for (int j = i+i; j < arr.length; j+=i) {
arr[j] = 0;
}

if (arr[num]==0) {
break;
}


}

if (arr[num]==0) {
System.out.println(num+" 是合数");
}else {
System.out.println(num+" 是素数");
}

}


public void prime(int num) {
if (num<2) {
System.out.println("输入的数据不合法!");
return;
}

int arr[] = new int[num+1];

for (int i = 0; i < arr.length; i++) {

arr[i] = i;
}




for (int j = 2; j < arr.length-1; j++) {

while(arr[j]==0){
j++;
}

for (int k = j+1; k < arr.length; k++) {
if ((arr[k] % j) == 0) {
arr[k] = 0;
}
}

if (arr[num]==0) {
break;
}



}

if (arr[num]==0) {
System.out.println(num+" 是合数");
}else {
System.out.println(num+" 是素数");
}

}

}

可见全程用加法的算法效率是最高的。

limaodeng

scribble