题意简述
给定一个整数 $n$($2\le n\le 10^{14}$),在 $n\gt 1$ 时重复执行:
- 如果 $n$ 是偶数,那么让 $n$ 变为原来的一半($n\leftarrow\frac{n}{2}$);
- 如果 $n$ 是奇数,那么让 $n$ 变为 $3\times n+3$($n\leftarrow 3n+3$)。
问是否能在有限次步数内结束操作。是输出 TAK,否输出 NIE。
分析
结论题。
没有思路,不妨画个图表示一下变换的过程(请读者自行画图)。画了一段时间后不难发现,能走到点 $1$ 的点只有 $2,4,8,...$ 这些编号为 $2^k$ 的点。猜测当且仅当 $n$ 是 $2$ 的正整数次幂时,操作能在有限步数内结束。
下面来证明一下这个结论。充分性是显然的,接下来证必要性。
如果 $n$ 不是 $2$ 的正整数次幂,由于 $n\ge 2$ 且 $n$ 为正整数,故 $n$ 的质因数分解中必存在奇数因子。
操作时,根据规则,$n$ 中 $2$ 的幂次将降至 $0$,然后执行 $n$ 为奇数时的操作。
等等!$3n+3=3(n+1)$,也就是说 $n$ 在执行完这次操作之后一定会带上 $3$ 这个因子!
此后 $n$ 为偶数的操作中,$3$ 这个因子无法被消除,到 $n$ 重新变为奇数之前,$3$ 这个因子永远会存在。再次进行了 $n\leftarrow 3(n+1)$ 这个操作后,$3$ 这个因子仍然是存在的!
因此,我们得出结论:只要 $n$ 不是 $2$ 的倍数,那么它将会永远被 $3$ 所支配(操作不会结束)!!
必要性得证,因此问题转化为了判断 $n$ 是不是 $2$ 的幂次。方法很多,我的方法是转化为判断 $n=\text{lowbit}(n)$ 是否成立(怎么算 $\text{lowbit}$ 请参考你的树状数组,或者你可以枚举 $2$ 的幂次),时间复杂度 $\mathcal{O}(1)$(当然 $\mathcal{O}(\log n)$ 的做法也能接受)。
代码难度很低,请自行完成。
尾声
感谢您的阅读,若有不妥还请批评指正。