文章目录
0x00 前言
角谷猜想也称 3x+1 猜想,最早是流传于美国西拉古斯大学,不久后一位名为角谷静夫的日本数学家把它带到亚洲,故称角谷猜想。角谷猜想是任意一个自然数 N ,如果这个自然数 N 为偶数则除以 2 ,如果这个自然数 N 为奇数则乘以 3 再加 1 ,如此反复结果必然为最小自然数 1 。
0x01 问题分析
关于角谷猜想的迭代公式:
其中 X 是奇数, m 是让 3X+1 中的偶数析出并抵消并且让整个分数成为奇数,直到等于 1 为止。
根据迭代公式给出以下示例:
N=3→10→5→16→8→4→2→1 |
N=4→2→1 |
N=5→16→8→4→2→1 |
N=9→28→14→7→22→11→34→17→52→26→13→40→20→10→5→16→8→4→2→1 |
N=12→6→3→10→5→16→8→4→2→1 |
0x02 代码设计
n = int(input("输入一个自然数:"))
代码解析:使用 int() 函数以整数形式获取用户输入。
while n != 1:
代码解析:构造 while 循环并设置循环规则,当 n=1 时退出循环。
if n % 2 == 1:
n = n * 3 + 1
print(f'{n} ', end = ' ')
代码解析:使用 n % 2 ==1 用来判断用户输入的数是否为奇数,如果是则乘以 3 加 1 ,并打印当前步骤。 f'...' 方法类似 .format 方法,用于格式化输出。 end = ' ' 表示不换行输出。
else:
n //= 2
print(f'{n} ', end = ' ')
代码解析:如果用户输入的数不为奇数,那么直接除以 2 ,并打印当前步骤。
0x03 代码流程
![](https://i-blog.csdnimg.cn/blog_migrate/7763a6573a18f758d5735ada4cb11c08.png)
0x04 完整代码
n = int(input("输入一个自然数:"))
while n != 1:
if n % 2 == 1:
n = n * 3 + 1
print(f'{n} ', end = ' ')
else:
n //= 2
print(f'{n} ', end = ' ')
0x05 运行效果
请输入一个自然数:9
28 14 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
Process finished with exit code 0
0x06 参考文献
[1].百度百科. 3x+1猜想[EB/OL]. [2022-09-23]. https://baike.baidu.com/item/3x%2B1%E7%8C%9C%E6%83%B3/5833803#2.
0x07 总结
文章内容为学习记录的笔记,由于作者水平有限,文中若有错误与不足欢迎留言,便于及时更正。