编程验证克拉兹猜想
从短视频看到一个数学难题。
克拉兹猜想 Collatz conjecture
又称奇偶归一猜想、冰雹猜想或 3n+1 猜想,是数学中一个著名但尚未解决的难题。
运算规则:
对于任何一个正整数 n,执行以下两种简单操作:
- 如果 n 是偶数,则将其除以 2(即 n/2)。
- 如果 n 是奇数,则将其乘 3 再加 1(即 3n+1)。
猜想内容:
不断重复上述步骤,得到的数字会反覆变化。该猜想断言:无论初始数字是多少,最终都必然能回到 1。
编程实现:
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
// 输入一个正整数
long long n;
// 计数器
long long c = 0;
cin >> n;
while ( n != 1)
{
if (n % 2 == 0)
{
n = n / 2;
}
else
{
n = n * 3 + 1;
}
c++;
cout << c << ":" << "n = " << n << endl;
}
return 0;
} 实现很简单,IF判断奇数偶数,外层嵌套循环来判断是否到1。
试了很多数字确实都回到1。
27是很奇葩的数字,经过运算后,要经历111次运算才会回到1,期间第77次运算数值会上身到9232
运算中的数字毫无规律。
某些数字太大有可能造成溢出。

晋公网安备14030302000174号 |