1976年的一天,《华盛顿邮报》于头版头条报道了一条数学新闻。文中记叙了这样一个故事:
70年代中期,美国各所名牌大学校园内,人们都像发疯一般,废寝忘食地玩弄一种数学游戏。这个游戏十分简单:任意写出一个自然数N,并且按照以下的规律进行变换:
如果是个奇数,则下一步变成3N+1。
如果是个偶数,则下一步变成N/2。
为什么这种游戏的魅力经久不衰?因为人们发现,无论N是怎样一个数字,最终都无法逃脱回到谷底1。准确地说,是无法逃出落入底部的4-2-1循环,永远也逃不出这样的这就是著名的“冰雹猜想” 。
以下是go语言写的验证 可以预先透露一下据日本和美国的数学家攻关研究,在小于7*10^11的所有的正整数,都符合这个规律
package main
import (
"fmt"
)
func hail(n uint) {
fmt.Println()
var index uint
for index = 1; index < n; index++ {
var times uint
var i uint
i = index
fmt.Printf("%v\t", i)
for {
if i == 1 || times > 500000000000 {
fmt.Println()
break
} else if i%2 == 0 {
i = i / 2
times++
fmt.Printf("%v\t", i)
continue
} else if i%2 == 1 {
i = 3*i + 1
times++
fmt.Printf("%v\t", i)
continue
}
}
if times > 500000000000 {
fmt.Printf("数字%v在5千亿步内无法验证\n", index)
}
fmt.Printf("数字%v可以验证,变成1一共用了%v次\n", index, times)
fmt.Println()
}
}
func main() {
var n uint
label01:
fmt.Println("请输入你想验证的数字上限") // 你想要验证多少以内的数字
fmt.Scanln(&n)
if n <= 0 {
fmt.Println("您输入的数字有误,输入的数字请大于0")
goto label01
}
hail(n)
}
下面是40以内的结果
$ go run main.go
请输入你想验证的数字上限
41
1
数字1可以验证,变成1一共用了0次
2 1
数字2可以验证,变成1一共用了1次
3 10 5 16 8 4 2 1
数字3可以验证,变成1一共用了7次
4 2 1
数字4可以验证,变成1一共用了2次
5 16 8 4 2 1
数字5可以验证,变成1一共用了5次
6 3 10 5 16 8 4 2 1
数字6可以验证,变成1一共用了8次
7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
数字7可以验证,变成1一共用了16次
8 4 2 1
数字8可以验证,变成1一共用了3次
9 28 14 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
数字9可以验证,变成1一共用了19次
10 5 16 8 4 2 1
数字10可以验证,变成1一共用了6次
11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
数字11可以验证,变成1一共用了14次
12 6 3 10 5 16 8 4 2 1
数字12可以验证,变成1一共用了9次
13 40 20 10 5 16 8 4 2 1
数字13可以验证,变成1一共用了9次
14 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
数字14可以验证,变成1一共用了17次
15 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1
数字15可以验证,变成1一共用了17次
16 8 4 2 1
数字16可以验证,变成1一共用了4次
17 52 26 13 40 20 10 5 16 8 4 2 1
数字17可以验证,变成1一共用了12次
18 9 28 14 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
数字18可以验证,变成1一共用了20次
19 58 29 88 44 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
数字19可以验证,变成1一共用了20次
20 10 5 16 8 4 2 1
数字20可以验证,变成1一共用了7次
21 64 32 16 8 4 2 1
数字21可以验证,变成1一共用了7次
22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
数字22可以验证,变成1一共用了15次
23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1
数字23可以验证,变成1一共用了15次
24 12 6 3 10 5 16 8 4 2 1
数字24可以验证,变成1一共用了10次
25 76 38 19 58 29 88 44 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
数字25可以验证,变成1一共用了23次
26 13 40 20 10 5 16 8 4 2 1
数字26可以验证,变成1一共用了10次
27 82 41 124 62 31 94 47 142 71 214 107 322 161 484 242 121 364 182 91 274 137 412 206 103 310 155 466 233
700 350 175 526 263 790 395 1186 593 1780 890 445 1336 668 334 167 502 251 754 377 1132 566 283 850 425 1276 638 319
958 479 1438 719 2158 1079 3238 1619 4858 2429 7288 3644 1822 911 2734 1367 4102 2051 6154 3077 9232 4616 2308 1154 577 1732 866 433
1300 650 325 976 488 244 122 61 184 92 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1
数字27可以验证,变成1一共用了111次
28 14 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
数字28可以验证,变成1一共用了18次
29 88 44 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
数字29可以验证,变成1一共用了18次
30 15 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1
数字30可以验证,变成1一共用了18次
31 94 47 142 71 214 107 322 161 484 242 121 364 182 91 274 137 412 206 103 310 155 466 233 700 350 175 526 263
790 395 1186 593 1780 890 445 1336 668 334 167 502 251 754 377 1132 566 283 850 425 1276 638 319 958 479 1438 719 2158
1079 3238 1619 4858 2429 7288 3644 1822 911 2734 1367 4102 2051 6154 3077 9232 4616 2308 1154 577 1732 866 433 1300 650 325 976 488
244 122 61 184 92 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1
数字31可以验证,变成1一共用了106次
32 16 8 4 2 1
数字32可以验证,变成1一共用了5次
33 100 50 25 76 38 19 58 29 88 44 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
数字33可以验证,变成1一共用了26次
34 17 52 26 13 40 20 10 5 16 8 4 2 1
数字34可以验证,变成1一共用了13次
35 106 53 160 80 40 20 10 5 16 8 4 2 1
数字35可以验证,变成1一共用了13次
36 18 9 28 14 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
数字36可以验证,变成1一共用了21次
37 112 56 28 14 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
数字37可以验证,变成1一共用了21次
38 19 58 29 88 44 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
数字38可以验证,变成1一共用了21次
39 118 59 178 89 268 134 67 202 101 304 152 76 38 19 58 29 88 44 22 11 34 17 52 26 13 40 20 10
5 16 8 4 2 1
数字39可以验证,变成1一共用了34次
40 20 10 5 16 8 4 2 1
数字40可以验证,变成1一共用了8次