您好,登錄后才能下訂單哦!
“考拉茲猜想”是一個數(shù)學(xué)上的未解之謎。
考拉茲猜想
對自然數(shù) n 循環(huán)執(zhí)行如下操作。
- n 是偶數(shù)時,用 n 除以 2
- n 是奇數(shù)時,用 n 乘以 3 后加 1
如此循環(huán)操作的話,無論初始值是什么數(shù)字,最終都會得到 1(會進(jìn)入1 → 4 → 2 → 1 這個循環(huán))。
這里我們稍微修改一下這個猜想的內(nèi)容,即假設(shè)初始值為偶數(shù)時,也用 n 乘以 3 后加 1,但只是在第一次這樣操作,后面的循環(huán)操作不變。而我們要考慮的則是在這個條件下最終又能回到初始值的數(shù)。
譬如,以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 的偶數(shù)中,像上述的 2 或者 4 這樣“能回到初始值的數(shù)”有多少個。
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 個數(shù)\n", len(s))
}
結(jié)果:
[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 個數(shù)
本來用遞歸函數(shù),發(fā)現(xiàn)有些麻煩,就用了for循環(huán),發(fā)現(xiàn)很容易就搞定了,只需注意跳出循環(huán)的條件設(shè)計就好。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。