#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const long long MAXN = 1000000;
long long dp[MAXN + 10];
long long SumChain(long long n)
{
long long sum = 0;
// cout<<endl;
while(n != 1)
{
//cout<<n<<" ";
if(n <= MAXN && dp[n] != -1)
{
sum += dp[n];
return sum;
}
sum++;
if((n & 1) == 1)
{
n = 3 * n + 1;
}
else
{
n = n /2;
}
}
// cout<<endl;
sum++;
return sum;
}
int main()
{
long long MAX = 0;
long long ans;
long long flag;
long long i;
memset(dp,255,sizeof(dp));
for(i = 1; i <= 1000000; i++)
{
// cout<<"i: "<<i<<endl;
flag = SumChain(i);
dp[i] = flag;
// cout<<"Length of chain: "<<flag<<endl;
if(flag > MAX)
{
MAX = flag;
ans = i;
}
}
printf("%lld\n",MAX);
printf("%lld\n",ans);
return 0;
}
problem14 最长链
最新推荐文章于 2020-01-31 14:30:03 发布