第十五章,算出来了(3 / 3)
简单,肯定不简单呀,祝齐心里暗暗嘀咕。
“这次我就不给大家讲逻辑了,请大家自己去思考3x+1该怎么转成计算机代码,下课前能写完就给我看看,不能写完也没关系。我设的范围是,请大家找出1亿以内的,重复上面计算步数最多的数。”
说完,老师便从讲台上起身,坐在了程羽的旁边,和他说说笑笑,不知道在讨论什么。
机房里,有一些人仍没做完二进制的题,也有一些人留下来思考这道3x+1问题,初看题目,简单得有些不像话,也的确只有加减乘除这些小学二年级教科书的水平,但是当他们心算或用计算机试验了下后,又都吃惊起来。
例如9,它是奇数,乘3+1之后是28,是偶数除以2,14,7,22,11,34,17,52,26,13,4,2,1,5,16,8,4,2,1
是的,只是一个9,就如同过山车一样经历了二十步计算,这简直就像魔法!
祝齐也吃了一惊,不过他吃惊的是自己的大脑反应速度,在最初的几步计算时,他还是在用自己的大脑一步一步计算,有时候还得回想乘法口诀表。
但是当他将注意力集中在拆分每一步计算,把判断一个数是奇数和偶数只用看末尾一位也细化出来后,就像大脑开了穿山隧道,在想到一个数后,他就直接给出了答案。
没有任何的思考时间!
十亿以内,也就是说,他只需要将这个计算过程,从1开始,一直重复到十亿就可以了,对吧?
就用刚才老师教过他的,他只需要在脑海中放置一个数,每次计算完一轮,他就将这个数加一,周而复始,直到这个数加到1为止,祝齐特意数了数,一共九个。
祝齐吸了口气,闭上眼睛,又慢慢地呼出一口气,再睁开了自己的眼睛,他不自主地笑了起来。
他已经算出来了。
程羽正在写着自己的算法,如果只是将文字转成代码的话,很简单,最多需要注意的问题就是防止32位数值int溢出罢了。但是,十亿是个对计算机来说也非常大的数字,稍微有些追求的人,看到十亿,就会条件反射地想到要优化计算时间。
程羽稍微回忆自己的经验,就想到一些基本的优化方法,一个奇数乘3,还是奇数,加1就是偶数,所以一个奇数可以直接乘3+1再除2,不必判断奇偶。如果是2的n次方,就不用每次都判断是否偶数,他只用维持一个筛查表,只计算被筛除过的数。
但再往前,对程羽也有些难,对于大量计算,增加更多判断条件,本身也是计算负担,再向前进行任何优化,都像在计算芯片嘴里拔牙一样困难。
任课老师也坐在程羽旁边,不时给出指导。他也想看看,程羽能有什么好主意。
“老师,我算出来了,十亿内,步数最多的是67617279,有986步。”
程羽本在深入思考中,也被吸引,看向说话的人,有谁能算得这么快?
在程羽仔细的打量中,一个其貌不扬的男生第一次进入了他的视线。