1. 程式人生 > >Go語言實現的素數篩選程式

Go語言實現的素數篩選程式

通過這個例子可以瞭解陣列的定義及其使用、切片的定義及其使用。同時,也可以瞭解變數的定義,各種控制語句的使用,型別的轉換等。

這裡給出的程式,計算1000以內的所有素數,輸出的每一行是序號+素數。

Go語言程式:

// prime project main.go
package main

import (
	"fmt"
	"math"
)

const N int = 1000

var pflag [N + 1]bool
var prime []int

func esieve(n int) {
	pflag[2] = true
	for i := 3; i <= N; i += 2 {
		pflag[i] = true
	}

	end := int(math.Sqrt(float64(n)))

	for i := 3; i <= end; i += 2 {
		step := i + i
		if pflag[i] {
			j := i + step
			for j <= n {
				pflag[j] = false
				j += step
			}
		}
	}

	prime = append(prime, 1)
	for i := 2; i <= N; i++ {
		if pflag[i] {
			prime = append(prime, i)
		}
	}
}

func main() {
	esieve(N)

	for i := range prime {
		fmt.Printf("%d: %d\n", i, prime[i])
	}
}


程式執行結果:

0: 1
1: 2
2: 3
3: 5
4: 7
5: 11
6: 13
7: 17
8: 19
9: 23
10: 29
11: 31
12: 37
13: 41
14: 43
15: 47
16: 53
17: 59
18: 61
19: 67
20: 71
21: 73
22: 79
23: 83
24: 89
25: 97
26: 101
27: 103
28: 107
29: 109
30: 113
31: 127
32: 131
33: 137
34: 139
35: 149
36: 151
37: 157
38: 163
39: 167
40: 173
41: 179
42: 181
43: 191
44: 193
45: 197
46: 199
47: 211
48: 223
49: 227
50: 229
51: 233
52: 239
53: 241
54: 251
55: 257
56: 263
57: 269
58: 271
59: 277
60: 281
61: 283
62: 293
63: 307
64: 311
65: 313
66: 317
67: 331
68: 337
69: 347
70: 349
71: 353
72: 359
73: 367
74: 373
75: 379
76: 383
77: 389
78: 397
79: 401
80: 409
81: 419
82: 421
83: 431
84: 433
85: 439
86: 443
87: 449
88: 457
89: 461
90: 463
91: 467
92: 479
93: 487
94: 491
95: 499
96: 503
97: 509
98: 521
99: 523
100: 541
101: 547
102: 557
103: 563
104: 569
105: 571
106: 577
107: 587
108: 593
109: 599
110: 601
111: 607
112: 613
113: 617
114: 619
115: 631
116: 641
117: 643
118: 647
119: 653
120: 659
121: 661
122: 673
123: 677
124: 683
125: 691
126: 701
127: 709
128: 719
129: 727
130: 733
131: 739
132: 743
133: 751
134: 757
135: 761
136: 769
137: 773
138: 787
139: 797
140: 809
141: 811
142: 821
143: 823
144: 827
145: 829
146: 839
147: 853
148: 857
149: 859
150: 863
151: 877
152: 881
153: 883
154: 887
155: 907
156: 911
157: 919
158: 929
159: 937
160: 941
161: 947
162: 953
163: 967
164: 971
165: 977
166: 983
167: 991
168: 997

程式說明(本程式包含以下要點)

1.常量說明

2.全域性變數

3.陣列和切片

4.控制語句:if語句和for語句

5.變數定義:用賦值運算子號":="(一般賦值用"=",複合賦值運算子"+="等也是可以使用的)

6.數學函式:在庫math中,例如函式math.Sqrt(),需要注意呼叫方式

7.型別轉換:似乎需要強制的型別轉換,例如:"end := int(math.Sqrt(float64(n)))"

8.增加切片元素,需要使用函式append()

參考連結: