每周一道算法题008:考拉兹猜想
作者:互联网
问题:
考拉兹猜想
对自然数n循环执行如下操作。
•n是偶数时,用n除以2
•n是奇数时,用n乘以3后加1如此循环操作的话,无论初始值是什么数字,最终都会得到1(会进入1 → 4 → 2 → 1这个循环)。
现在设定初始值为偶数时,对其进行乘以3后加1,后续操作不变。如
4 → 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4
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
标签:偶数,考拉,return,val,初始值,checkNum,算法,10000,008 来源: https://blog.51cto.com/ustb80/2428753