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()
参考链接: