跳到主要内容

题解:AT_nikkei2019ex_e コラッツ問題

· 阅读需 1 分钟
lailai
Blogger

原题链接

解题思路

p=f(x)p=f(x),则有:

p1={f(x2)xmod2=0f(3x+1)xmod2=1p-1= \begin{cases} f\left(\frac{x}{2}\right)&x\bmod2=0 \\ f(3x+1)&x\bmod2=1 \end{cases}

样例 #2 给了 p=1000p=1000 的一个解 x=1789997546303x=1789997546303,根据结论倒推即可。

参考代码

#include <bits/stdc++.h>
using namespace std;

using ll=long long;
int main()
{
int p;
cin>>p;
ll f=1789997546303;
for(int i=999;i>=p;i--)
{
if(f&1)f=f*3+1;
else f>>=1;
}
cout<<f<<'\n';
return 0;
}