Project Eluer14

来源:互联网 发布:python 淘宝联盟 爬虫 编辑:程序博客网 时间:2024/06/06 09:21

给定数列的第一项,我们用如下法则生成该数列:若x为偶数,则下一项为x的一半,否则,下一项为3x+1。这样下去,直到有一项是1停止。

问:小于1000000的正整数中,哪一个为第一项时该数列的项数最多。


KEY:程序运行的时候会超出int表示位数

算法实现:

依次求出小于1000000的正整数的项数,规则如下:

  • 当i为偶数时,i=i/2;
  • 当i为奇数时,i=3i+1;
  • 直到i=1停止;

程序代码:

#include <iostream>#include <time.h>using namespace std;int main(){clock_t start,end;start=clock();_int64 a,t=0,x,y;for(int i=1;i<1000000;++i){a=1;y=i;while(y!=1){++a;if(0==y%2)y=y/2;elsey=3*y+1;}if(t<a){x=i;t=a;}}    printf("%I64d",x);cout<<endl;end=clock();cout<<"Run Time :"<<(end-start)/1000<<" s"<<endl;return 0;}



或许这不是最好的程序实现方法,希望有更好算法的大侠们共同探讨下。