快乐数

<image>

快乐数（happy number）有以下的特性：在给定的进位制下，该数字所有数字平方和（数位的平方和），得到的新数再次求所有数位的平方和，如此重复进行，最终结果必为1。

以十进制为例：

28 → 22 + 82 = 68

→ 62 + 82 = 100

→ 12 + 02 + 02 = 1

37 → 32 + 72 = 58

→ 52 + 82 = 89

→ 82 + 92 = 145

→ 12 + 42 + 52 = 42

→ 42 + 22 = 20

→ 22 + 02 = 4

→ 42 = 16

→ 12 + 62 = 37

因此28是快乐数，而在37的计算过程中，数字会重复出现，继续计算的结果只会是上述数字的循环（不快乐数循环），不会出现1，因此37不是快乐数。

不是快乐数的数称为不快乐数（unhappy number），所有不快乐数的数位平方和计算，最后都会进入 4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4 的循环中。

在十进制下，100以内的快乐数有：1, 7, 10, 13, 19, 23, 28, 31, 32, 44, 49, 68, 70, 79, 82, 86, 91, 94, 97, 100，共20个。

## 十进制下的快乐数

### 表格

以下是小于100的快乐数表格，绿色数字表示它是快乐数，红色数字表示它是不快乐数循环。

00｜01｜02｜03｜04｜05｜06｜07｜08｜09

10｜11｜12｜13｜14｜15｜16｜17｜18｜19

20｜21｜22｜23｜24｜25｜26｜27｜28｜29

30｜31｜32｜33｜34｜35｜36｜37｜38｜39

40｜41｜42｜43｜44｜45｜46｜47｜48｜49

50｜51｜52｜53｜54｜55｜56｜57｜58｜59

60｜61｜62｜63｜64｜65｜66｜67｜68｜69

70｜71｜72｜73｜74｜75｜76｜77｜78｜79

80｜81｜82｜83｜84｜85｜86｜87｜88｜89

90｜91｜92｜93｜94｜95｜96｜97｜98｜99

以下是100到小于200的快乐数表格，绿色数字表示它是快乐数，红色数字表示它是不快乐数循环。

100｜101｜102｜103｜104｜105｜106｜107｜108｜109

110｜111｜112｜113｜114｜115｜116｜117｜118｜119

120｜121｜122｜123｜124｜125｜126｜127｜128｜129

130｜131｜132｜133｜134｜135｜136｜137｜138｜139

140｜141｜142｜143｜144｜145｜146｜147｜148｜149

150｜151｜152｜153｜154｜155｜156｜157｜158｜159

160｜161｜162｜163｜164｜165｜166｜167｜168｜169

170｜171｜172｜173｜174｜175｜176｜177｜178｜179

180｜181｜182｜183｜184｜185｜186｜187｜188｜189

190｜191｜192｜193｜194｜195｜196｜197｜198｜199

以下是200到小于300的快乐数表格，绿色数字表示它是快乐数。

200｜201｜202｜203｜204｜205｜206｜207｜208｜209

210｜211｜212｜213｜214｜215｜216｜217｜218｜219

220｜221｜222｜223｜224｜225｜226｜227｜228｜229

230｜231｜232｜233｜234｜235｜236｜237｜238｜239

240｜241｜242｜243｜244｜245｜246｜247｜248｜249

250｜251｜252｜253｜254｜255｜256｜257｜258｜259

260｜261｜262｜263｜264｜265｜266｜267｜268｜269

270｜271｜272｜273｜274｜275｜276｜277｜278｜279

280｜281｜282｜283｜284｜285｜286｜287｜288｜289

290｜291｜292｜293｜294｜295｜296｜297｜298｜299

300以内的快乐数没有其中一位是5，300以内的数其中有一位是5，它一定不是快乐数。

以下是300到小于400的快乐数表格，绿色数字表示它是快乐数。

300｜301｜302｜303｜304｜305｜306｜307｜308｜309

310｜311｜312｜313｜314｜315｜316｜317｜318｜319

320｜321｜322｜323｜324｜325｜326｜327｜328｜329

330｜331｜332｜333｜334｜335｜336｜337｜338｜339

340｜341｜342｜343｜344｜345｜346｜347｜348｜349

350｜351｜352｜353｜354｜355｜356｜357｜358｜359

360｜361｜362｜363｜364｜365｜366｜367｜368｜369

370｜371｜372｜373｜374｜375｜376｜377｜378｜379

380｜381｜382｜383｜384｜385｜386｜387｜388｜389

390｜391｜392｜393｜394｜395｜396｜397｜398｜399

发现10*10、100*100等表格的快乐数表格有线对称。

### 因数

以下是300以内的快乐数因数。

快乐数｜因数｜因数个数｜奇偶数｜数字和

1｜1｜1｜奇数｜1

7｜1、7｜2｜奇数｜7

10｜1、2、5、10｜4｜偶数｜1

13｜1、13｜2｜奇数｜4

19｜1、19｜2｜奇数｜10

23｜1、23｜2｜奇数｜5

28｜1、2、4、7、14、28｜6｜偶数｜10

31｜1、31｜2｜奇数｜4

32｜1、2、4、8、16、32｜6｜偶数｜5

44｜1、2、4、11、22、44｜6｜偶数｜8

49｜1、7、49｜3｜奇数｜13

68｜1、2、4、17、34、68｜6｜偶数｜14

70｜1、2、5、7、10、14、35、70｜8｜偶数｜7

79｜1、79｜2｜奇数｜16

82｜1、2、41、82｜4｜偶数｜10

86｜1、2、43、86｜4｜偶数｜14

91｜1、7、13、91｜4｜奇数｜10

94｜1、2、47、94｜4｜偶数｜13

97｜1、97｜2｜奇数｜16

100｜1、2、4、5、10、20、25、50、100｜9｜偶数｜1

103｜1、103｜2｜奇数｜4

109｜1、109｜2｜奇数｜10

129｜1、3、43、129｜4｜奇数｜12

130｜1、2、5、10、13、26、65、130｜8｜偶数｜4

133｜1、7、19、133｜4｜奇数｜7

139｜1、139｜2｜奇数｜13

167｜1、167｜2｜奇数｜14

176｜1、2、4、8、11、16、22、44、88、176｜10｜偶数｜14

188｜1、2、4、47、94、188｜6｜偶数｜17

190｜1、2、5、10、19、38、95、190｜8｜偶数｜10

192｜1、2、3、4、6、8、12、16、24、32、48、64、96、192｜14｜偶数｜12

193｜1、193｜2｜奇数｜13

203｜1、7、29、203｜4｜奇数｜5

208｜1、2、4、8、13、16、26、52、104、208｜10｜偶数｜10

219｜1、3、73、219｜4｜奇数｜12

226｜1、2、113、226｜4｜偶数｜10

230｜1、2、5、10、23、46、115、230｜8｜偶数｜5

236｜1、2、4、59、118、236｜6｜偶数｜11

239｜1、239｜2｜奇数｜14

262｜1、2、131、262｜4｜偶数｜10

263｜1、263｜2｜奇数｜11

280｜1、2、4、5、7、8、10、14、20、28、35、40、56、70、140、280｜16｜偶数｜10

291｜1、3、97、291｜4｜奇数｜12

293｜1、293｜2｜奇数｜14

由表格可知：

- 128以内快乐数没有因数3、6、9等数，如果128以内的数是3的倍数等，它一定不是快乐数。
- 1000以内快乐数没有因数9、15、18、21等数，如果1000以内的数是9的倍数等，它一定不是快乐数。
- 1000以内快乐数同样也没有能被25整除但不能被100整除，即尾数是（25、50或75的数），如果1000以内的数是25的倍数但不是100的倍数，它一定不是快乐数。
- 1000以内的快乐数有143个，只有7个是3的倍数，129、192、219、291、888、912、921，几率:5%。
- 1000以内的快乐数有143个，有其中一位是5的只有12个，356、365、536、556、563、565、566、635、653、655、656、665，几率:8%。
- 1000以内的快乐数有143个，只有3个是25的倍数，100、700、1000，几率:2%。

### 快乐质数

300以内的快乐质数有：7, 13, 19, 23, 31, 79, 97, 103, 109, 139, 167, 193, 239, 263, 293，共15个。

### 连续快乐数

最小的连续快乐数的一对是31和32，较小的前10项是31、129、192、262、301、319、367、391、565、622，较大的前10项则是32、130、193、263、302、320、368、392、566、623。最小的连续3个快乐数是1880开始，4个连续快乐数是7839，5个是44488。

### 快乐完全数

已知的51个完全数，只有3个是快乐数：28、496、8128。

## 其他进制的快乐数

- 三进制：1, 3, 9, 13, 17, 23, 25, 27, 31, 35, 37, 39, 47, 51, 53, 59, 61, 65, 69, 71, 73, 75, 77, 79, 81, 85, 89, 91, 93
- 五进制：1, 5, 7, 11, 19, 23, 25, 27, 33, 35, 41, 43, 49, 51, 55, 79, 81, 83, 91, 93, 95, 99
- 任何进制（最小快乐数且大于1）：2, 3, 2, 5, 6, 7, 8, 3, 7, 11, 12, 13, 14, 15, 2, 17, 2, 5, 2, 21, 22, 23, 24, 5, 26, 27, 28, 3, 2, 31, 32, 33, 3, 35, 6, 31, 38, 39, 40, 13, 42, 43, 44, 45, 46, 47, 48, 7, 50, 51, 52, 31, 54, 53, 56, 57, 58, 59, 54, 61, 62, 63, 8, 65, 66, 67, 12, 69, 70, 71, 72

## 其他进制的不快乐数循环

- 2进制
- 每个数都是快乐数
- 3进制
- 2 → 11 → 2
- 在十进制中为2 → 4 → 2
- 4进制
- 每个数都是快乐数
- 5进制
- 4 → 31 →20 → 4
- 在十进制中为4 → 16 → 10 → 4
- 23 → 23
- 在十进制中为13 → 13
- 6进制
- 5 → 41 → 25 → 45 → 105 → 42 → 32 → 21 → 5
- 在十进制中为5 → 25 → 17 → 29 → 41 → 26 → 20 → 13 → 5
- 7进制
- 2 → 4 → 22 → 11 → 2
- 在十进制中为2 → 4 → 16 → 8 → 2
- 34 → 34
- 在十进制中为25 → 25
- 8进制
- 4 → 20 → 4
- 在十进制中为4 → 16 → 4
- 5 → 31 → 12 → 5
- 在十进制中为5 → 25 → 10 → 5
- 32 → 15 → 32
- 在十进制中为26 → 13 → 26
- 9进制
- 58 → 108 → 72 → 58
- 在十进制中为53 → 89 → 65 → 53
- 55 → 55
- 在十进制中为50 → 50
- 10进制
- 4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4
- 11进制
- 75 → 68 → 91 → 75
- 在十进制中为82 → 74 → 100 → 82
- 23 → 12 → 5 → 23
- 在十进制中为25 → 13 → 5 → 25
- 12进制
- 22 → 8 → 54 → 35 → 2A → 88 → A8 → 118 → 56 → 51 → 22
- 在十进制中为26 → 8 → 64 → 41 → 34 → 104 → 128 → 164 → 66 → 61 → 26
- 21 → 5 → 21
- 在十进制中为25 → 5 → 25
- 13进制
- 79 → A0 → 79
- 在十进制中为100 → 130 → 100
- 36 → 36
- 在十进制中为45 → 45
- B2 → 98 → B2
- 在十进制中为145 → 125 → 145
- 67 → 67
- 在十进制中为85 → 85
- 14 → 14
- 在十进制中为17 → 17
- 16进制
- D → A9 → B5 → 92 → 55 → 32 → D
- 在十进制中为13 → 169 → 181 → 146 → 85 → 50 → 13

## 其他性质

- 快乐数加入数字0或交换的数也是快乐数，不快乐数的情况也是。例如：49是快乐数，94、4900也是快乐数；123不是快乐数，321、10203、123000也不是快乐数
- 通过检查十进制中前一百万个快乐数，它们的自然密度似乎约为0.15。十进制快乐数也许没有渐近密度。快乐数的自然密度上限大于0.18577，下限小于0.1138。
- 十进制不快乐数的循环只有一个，是 4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4。

## Python程式码

```python
#ishappy number

def ishappy(n):
    a = []
    while n not in a:
        a.append(n)
        n = sum([int(x) **2 for x in str(n)])
        
    return 'happy' if n == 1 else 'unhappy'
```

## 外部链接

- Happy number calculator - 可以线上判断数字是否为快乐数〔英文〕