考拉兹猜想的变体

发布时间:2020-06-24 13:15:13 作者:stlf2004
来源:网络 阅读:567

“考拉兹猜想”是一个数学上的未解之谜。

考拉兹猜想
对自然数 n 循环执行如下操作。

这里我们稍微修改一下这个猜想的内容,即假设初始值为偶数时,也用 n 乘以 3 后加 1,但只是在第一次这样操作,后面的循环操作不变。而我们要考虑的则是在这个条件下最终又能回到初始值的数。
譬如,以2为初始值,则计算过程如下。
2 → 7 → 22 → 11 → 34 → 17 → 52 → 26 → 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2
同样,如果初始值为4,则计算过程如下。
4 → 13 → 40 → 20 → 10 → 5 → 16 →8 → 4
但如果初始值为6,则计算过程如下,并不能回到初始值6。
6 → 19 → 58 → 29 → 88 → 44 → 22 → 11 → 34 → 17 → 52 → 26 → 13 →40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 → 4 → …


问题
求在小于 10000 的偶数中,像上述的 2 或者 4 这样“能回到初始值的数”有多少个。


package main

import "fmt"

func collatz(n int)bool{
    m := n * 3 + 1
    for{
        if m == 1{
            return false
        }else if m == n{
            return true
        }

        if m % 2 == 1{
            m = m * 3 + 1
        }else if m % 2 == 0{
            m = m / 2
        }
    }
}

func main(){
    var s []int
    for i:=2;i<10001;i+=2{
        if collatz(i){
            s = append(s, i)
        }
    }
    fmt.Println(s)
    fmt.Printf("共 %d 个数\n", len(s))
}

结果:

[2 4 8 10 14 16 20 22 26 40 44 52 106 184 206 244 274 322 526 650 668 790 866 976 1154 1300 1438 1732 1780 1822 2308 2734 3238 7288]
共 34 个数

本来用递归函数,发现有些麻烦,就用了for循环,发现很容易就搞定了,只需注意跳出循环的条件设计就好。

推荐阅读:
  1. Python角古猜想的实现方法
  2. Android客户端网易考拉软件的路由设计方法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

算法 go 考拉兹猜想

上一篇:如何评估自己的测试水平

下一篇:C#中的类:接口、抽象类、抽象方法、虚拟方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》