冰雹猜想(角谷猜想) go语言验证

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次

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容