一点一点前进...

0%

如果想不明白,那就换个脑子思考

昨天,在试着解决一道欧拉项目的问题,第六十九题

一开始,想法很简单,foreach循环1-1,000,000,计算每个值的phi(n),这样就能得到结果了。
一头扎进了这种想法,计算速度超级慢,就搜索各种互质数的性质,希望加快这一过程,最终,1s大概能处理1w数据,上10w之后需要2s,这还是很慢,根本不可能是正确的解决方案。

从两点半折腾到三点,还没结果。。。纠结。。。开会去了。

会中,继续思考这个问题,要使得n/phi(n)最大,phi(n)越小越好,互质数越少,那就要求n包含质数因数的个数越多越好,于是乎拿出手机,从2开始,一个质数一个质数的往上做乘法,计算到510510,下一个质数是19,乘完之后积就大于一百万了。

开完会后,输入510510,正确了!
换个脑子,手算就得到了答案真开心。

是的,当你想问题想不明白的时候,或者是陷入了某个泥潭,不妨站起来走一走,或者换件事情做,这样做的目的是让自己换个脑子,啊哈,或许,问题迎刃而解。

昨天的事情让我想到当时面试百度,三面,面试官出了一个题目:
有一堆元器件,比如说1000个,它们能够检测其他元器件是好的或者是坏的。如果自身是好的,那么就能真实的检测出被检测元器件的好坏,反之,不能检测出来,也就是说,检测的结果是随机的,和被检测的元器件好坏无关。有一个前提,这里一半以上都是好的。想出一种解决方案,罗列这1000个元器件是好是坏。

当时就在想如何拿一个去检测其他,然后再分析,让面试官给了一点提示,还是没想出来方法。当然,最后还是拿到了offer。
这里想说的是,当我走出了百度大厦,前往西二旗地铁站的路上,又开始想这个问题,一下子,想到了解决方案。

让999个元器件去测试一个,因为一半以上都是好的,那么,最后统计这999个结果,就能确定该电子元器件的好坏。如果这个是坏的,继续这种方式;如果这个是好的,那么用这个好的去测试其余的,就能得到正确结果了。

很多时候,问题的解决方法很简单,但是由于某种原因,我们会陷入泥潭,或者走了错误的道路而不知道回头。这个时候,暂停一下,让自己换个脑子,再去想这个问题,答案就在眼前。