考拉兹猜想——怎么又是你 的题解
记住只在没有思路时使用题解,不要从它复制粘贴代码。请尊重题目和题解的作者。
在解题之前提交题解的代码会导致封禁。
在解题之前提交题解的代码会导致封禁。
作者:
概述
本题要求给定整数 ,构造一个不超过
的正整数
,使得经过
次考拉兹函数变换后恰好得到
。核心解法是利用考拉兹序列在
附近的周期
,根据
直接输出
、
或
。
分析
核心观察
考拉兹函数在 处的循环为
,周期为
。
思路
对于 ,有
,
,
。因此:
- 若
,则
,输出
。
- 若
,则
,因为
,之后每
步循环一次,输出
。
- 若
,则
,因为
,
,输出
。
这些输出都满足 。
具体示例
样例 中
,
,输出
满足
。样例给出
,同样满足,因为
到
需要
步,而
,所以
。输出任意一个即可。
算法步骤
- 读取
k。 - 计算
k对取模的余数
r。 - 若
r等于,输出
;若
r等于,输出
;否则输出
。
复杂度分析
- 时间:
- 空间:
实现注意事项
k最大为,使用
int或long long均可。- 输出的是整数,不需要浮点数。
- 模运算结果直接用于分支。
源代码
#include <iostream>
using namespace std;
int main() {
long long k;
cin >> k;
int r = k % 3;
if (r == 0) cout << 1 << endl;
else if (r == 1) cout << 2 << endl;
else cout << 4 << endl;
return 0;
}
k = int(input())
r = k % 3
if r == 0:
print(1)
elif r == 1:
print(2)
else:
print(4)
评论