起因
无意间在youtube上看到,有主播说圆形360度,360是个神奇的数字的 “乘2” 或者 “除2” 。各个数字加起来都 等于 “9”,他还举了几个例子。
数字 | 分解 |
---|---|
1440 | 1+4+4+0 = 9 |
720 | 7+2 = 9 |
360 | 3+6 = 9 |
180 | 1+8+0 = 9 |
90 | 9+0 = 9 |
45 | 4+5 = 9 |
22.5 | 2+2+5 = 9 |
11.25 | 1+1+2+5 = 9 |
发现漏洞
向后多算两位怎么不灵了呢?
数字 | 分解 |
---|---|
5760 | 5+7+6+0 = 18 |
2880 | 2+8+8+0 = 18 |
… | … |
5.625 | 5+6+2+5 = 18 |
5.625 | 5+6+2+5 = 18 |
2.8125 | 2+8+1+2+5 = 18 |
纳尼?18 1+8 = 9 进入循环了吗?
验证
写个代码算一下:
- golang版本
package main
import (
"fmt"
"math/big"
"os"
"strconv"
)
func main() {
// 输入计算次数,测试360大数乘法,所有数字加起来是否等于9
test360BigMul(10000)
// 输入计算次数,测试360大数乘除法,所有数字加起来是否等于9
test360BigDivide(10000)
}
func test360BigMul(times int) {
big360 := big.NewFloat(1e40)
big_2 := big.NewFloat(1)
big360.SetString("360")
big_2.SetString("2")
for i:=0; i<times ;i++ {
big360 = big360.Mul(big360, big_2)
// 大数转字符串
big360Str := big360.Text('f', 10)
// 输出大数
//fmt.Print(big360Str)
// 算各个数字的和
sumNumbers(big360Str)
}
}
// 360 除
func test360BigDivide(times int) {
big360 := big.NewFloat(1e40)
big_2 := big.NewFloat(1)
big360.SetString("360")
big_2.SetString("2")
for i:=0; i<times ;i++ {
big360 = big360.Quo(big360, big_2)
// 大数转字符串
big360Str := big360.Text('f', 1e5)
// 输出大数
fmt.Print(big360Str)
// 算各个数字的和
sumNumbers(big360Str)
}
}
// 计算各个位的数字之和,如果数字位数>1 递归
func sumNumbers(number string) {
// 计算各个位的数字之和
sumNO := 0
for j:=0; j<len(number) ;j++ {
singleNumber, _ := strconv.Atoi(string(number[j]))
sumNO += singleNumber
}
// 结果转字符串
result := strconv.FormatInt(int64(sumNO),10)
// 输出各个位数字之和
fmt.Print(" --> " , result)
// 如果数字位数>1 递归
if len(result)>1 {
sumNumbers(result)
} else {
if result != "9" {
fmt.Println("结果不等于9终止")
os.Exit(0)
}
}
// 结束时换行
fmt.Println("")
}
还是真是进入循环。
为什么
难道真如主播说的这个数字是神奇的。。
借助数学算一算:360 = 9 * 40,360是9的倍数。
9的倍数各位加起来还是9的倍数
// 两位数
9*X = 10M + N
= 9M + (M+N)
9M 是9的倍数,所以M+N 也是9的倍数
// 三位数
9*X = 100L + 10M + N
= 99L + 9M + (L + M + N)
99L + 9M 是9的倍数,所以L + M + N 也是9的倍数
// 四位数
9*X = 1000K+ 100L + 10M + N
= 999K + 99L + 9M + (K + L + M + N)
999K + 99L + 9M 是9的倍数,所以K + L + M + N 也是9的倍数
最小的9的倍数是9。只要9的倍数位数多于1位,那就可以按照数字相加的方式收敛到1位的9的倍数。也就是9.