每周一道算法题008:考拉兹猜想
发布时间:2020-12-13 21:33:01 所属栏目:PHP教程 来源:网络整理
导读:问题: 考拉兹猜想 对自然数n循环执行如下操作。 ?n是偶数时,用n除以2 ?n是奇数时,用n乘以3后加1 如此循环操作的话,无论初始值是什么数字,最终都会得到1(会进入1 → 4 → 2 → 1这个循环)。 现在设定初始值为偶数时,对其进行乘以3后加1,后续操作不变
问题:
现在设定初始值为偶数时,对其进行乘以3后加1,后续操作不变。如 10000以内的偶数中,这样能在到达1之前回到初始值的数有多少个? 思路:创建一个死循环,对n不断的计算,直到n==1为止 解答:php // 检查偶数是否合要求 function checkNum($n){ $val = $n * 3 + 1; while ($val != 1){ $val = $val % 2 == 0? $val / 2 : $val * 3 + 1; if ($val == $n){ return true; } } return false; } $num = 0; for ($i = 2; $i < 10000; $i+=2) { if (checkNum($i)){ $num++; } } echo $num; 输出: 34 golang package main import "fmt" func main() { m := 0 for i := 2; i < 10000; i += 2 { if checkNum(i) { m++ } } fmt.Println(m) } func checkNum(n int) bool { val := n*3 + 1 for val != 1 { if val%2 == 0 { val = val / 2 } else { val = val*3 + 1 } if val == n { return true } } return false } 输出: 34 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |