100万以下的数字的最长序列
以下迭代序列定义在整数集合上:n n/2 (当n是偶数时)
n 3n + 1 (当n是奇数时)
应用以上规则,并且以数字13开始,我们得到以下序列:
13 40 20 10 5 16 8 4 2 1
可以看出这个以13开始以1结束的序列包含10个项。虽然还没有被证明(Collatz问题),但是人们认为在这个规则下,以任何数字开始都会以1结束。
以哪个不超过100万的数字开始,能给得到最长的序列?
注意: 一旦序列开始之后,也就是从第二项开始,项是可以超过100万的。
又是一个大数计算的,我写的程序直接按照题意求解,电脑算不出来了,求一个高效率的算法
#include <stdio.h>
int main()
{
__int64 i;
__int64 j=0;
int count=0;
int maxcount=0;
for(i=3;i<1000000;i++)
{
count=0;
while(1)
{
if(i/1==1&&i%1==0)
{
break;
}
if(i%2==0)
{
i/=2;
++count;
continue;
}
if(i%2!=0)
{
i=3*i+1;
++count;
continue;
}
}
if(count>maxcount)
{
maxcount=count;
j=i;
}
}
printf("%I64d %d\n",j,maxcount);
return 0;
}
[ 本帖最后由 tompobing 于 2013-3-27 21:35 编辑 ]