转载

人肉挑战欧拉计划:三和五的倍数

你没有猜错,笔者指的欧拉计划就是那个让无数理工生前赴后继的欧拉计划。如果你之前从前没有了解过欧拉计划,那么你可以去它的官网了解一下 projecteuler.net 。欧拉计划的本意是让人用编程的方式来解决问题,所以它经常被认为是最好的算法题库。但是笔者的尿性,非要用数学方法人肉挑战欧拉计划不可。这就必须要放弃程序中遍历、穷举以及大量的循环的这种方法。因为无论是遍历、穷举还是大量的循环,人肉都是很难做到的。譬如说,让计算机输入一万以内的所有素数,用不了一秒钟程序就能运行完成。但如果你人肉做这件事儿简直难于上青天。

那么言归正传,我们就来看看欧拉计划的第一题:Multiples of 3 and 5(三和五的倍数),你可以点击 阅读原文 在欧拉计划官方网站上看到这道题。

Multiples of 3 and 5

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.

这道题大致是讲:三和五的倍数 如果我们列出来十以内所有三和五的倍数,我们将得到:3、5、6和9。它们的和是23。请试计算出一千以内所有三和五的倍数和。

如果使用程序的话,这道题目只需要一次循环就可以完成了。所以说,这道题目如果使用数学方法也不会太难。

这里用 人肉挑战欧拉计划:三和五的倍数 来表示一千以内所有三和五的倍数和。于是就有:

人肉挑战欧拉计划:三和五的倍数

这里的 人肉挑战欧拉计划:三和五的倍数 表示的是项数。你应该已经发现了,实际上就是三个等差数列。如果写得更简单明了的形式应该是:

人肉挑战欧拉计划:三和五的倍数 +/frac{n_2}2(5+5{n_2})-/frac{n_3}2(15+15{n_3}))

如果你还不理解这个式子在干什么,可以理解为把1000以内所有3的倍数和5的倍数加在一起,然后因为这样一来它们的共同倍数就加了两遍,所有再减去一遍它们的共同倍数就可以了。

那么现在就来解决一个棘手的问题—— 人肉挑战欧拉计划:三和五的倍数 应该等于多少?

实际上这是非常好求的,你只需要把1000分别除以3、5和15然后再取整就可以了。

人肉挑战欧拉计划:三和五的倍数

接下来我们就算出它的具体值就可以得到这道题的答案了:

人肉挑战欧拉计划:三和五的倍数

这里还有一个问题,英文原文的"below 1000"和译文中的“一千以内”是有区别的。原文的意思是小于一千,而译文则有包含一千和不包含一千两种解释。234168这个答案是按照包含一千的情况给出的,如果按照原文的意思答案应该是233168。

这并不一道多么困难的题目,所以只凭借人脑和笔纸这样的简单工具还是可以完成的。在之后的题目中笔者将向各位读者展示的是手工处理庞大数据的技巧。如果你喜欢笔者的文章,你可以关注笔者的微信公众号:yevgeny_liu

人肉挑战欧拉计划:三和五的倍数

原文  http://www.epubit.com.cn/article/629
正文到此结束
Loading...