Go語言實現的素數篩選程式
阿新 • • 發佈:2019-01-27
通過這個例子可以瞭解陣列的定義及其使用、切片的定義及其使用。同時,也可以瞭解變數的定義,各種控制語句的使用,型別的轉換等。
這裡給出的程式,計算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()
參考連結: