为正整数集定义以下迭代序列:
n → n / 2(n为偶数)n →3 n + 1(n为奇数)
使用上面的规则并从13开始,我们生成以下序列:
13→40→20→10→5→16→8→4→2→1
可以看出,该序列(从13开始并在1结束)包含10个项。虽然尚未证实(Collatz问题),但认为所有起始数字都是1。
哪个起始编号低于一百万,产生最长的链?
注意:一旦链条启动允许超过一百万。
#include<iostream>
#include<string.h>
using namespace std;
//13→40→20→10→5→16→8→4→2→1
int len(_int64 n)
{
if(n==1) return 1;
else if(n%2==0)
return(len(n/2)+1);
else if(n%2==1&&n!=1)
return(len(n*3+1)+1);
}
void main()
{
int length=0;
_int64 i,a=0;
int max=0;
for(i=1;i<1000000;i++)
{
length=len(i);
if(length>max)
{
max=length;
a=i;
}
}
printf("%I64d\n",a);
cout<<max<<endl;
}