您的位置:首页 > 其它

Project Euler Solutions(Problem 1~7)

2015-04-13 09:34 197 查看

Project Euler 1-7

原地址如下

https://projecteuler.net/about

翻译题目地址如下:

http://pe.spiritzhang.com/index.php/2011-05-11-09-44-54

有点怀念做题的感觉,就从这开始吧(嘿嘿,PE大神都做过肯定会有答案滴,不会卡死),关键是一定要坚持下去,有进步有收获。~w_w~

默认使用Mathematica(Mma 9)实现,使用Python(2.7.2)会特别说明。

Problem 1 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.


译:10以下的自然数中,属于3和5的倍数的有3,5,6和9,它们之和是23. 找出1000以下的自然数中,属于3和5的倍数的数字之和。

思路:1000内3的倍数,5的倍数加起来减去15的倍数。

比较笨的法1:

[code]Sum[n*3, {n*3, {n, 1, N[999/3, 1]}]+
Sum[n*5, {n, 1, N[999/5, 1]}] - Sum[n*15, {n, 1, N[999/15, 1]}]


想起来用列表更好,参考Map的例子,有了法2:



[code]Total[#] & /@ {Range[3, 999, 3], Range[5, 999, 5], -Range[15, 999, 15]} // Total


看到还有暴力解决的法3:

[code]Total@Union@Flatten@Append[Range[3, 999, 3], Range[5,999, 5]]


Problem 2 Even Fibonacci numbers

Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be: 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, … By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.


译:斐波那契数列中的每一项被定义为前两项之和。从1和2开始,斐波那契数列的前十项为: 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, … 考虑斐波那契数列中数值不超过4百万的项,找出这些项中值为偶数的项之和。

参考NestWhile的例子,有法1:



[code]Total@Select[Table[Fibonacci
, {n, 1,
    NestWhile[(# + 1) &, 1, Fibonacci[#] < 4000000 &]}], EvenQ]


发现项数为3的倍数均为偶数。

[code]Table[Fibonacci
, {n, 20}]
{1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 
2584, 4181, 6765}


也可以这样写法2:

[code]m = NestWhile[(# + 1) &, 1, Fibonacci[#] < 4000000 &];
Total@Take[Table[Fibonacci
, {n, 1, m}], {3, m, 3}]


Problem 3 Largest prime factor

The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 600851475143 ?


译:13195的质数因子有5,7,13和29. 600851475143的最大质数因子是多少?

参考Sort的例子,暗喜这里不用写排序函数了。有法1:



[code]First[#] & /@ Sort@FactorInteger[600851475143] // Last


他人的法2:

[code]Sort[FactorInteger[600851475143], First &] // Last // First


好严谨,看着也顺眼。

Problem 4 Largest palindrome product

A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 × 99. Find the largest palindrome made from the product of two 3-digit numbers.


译:一个回文数指的是从左向右和从右向左读都一样的数字。最大的由两个两位数乘积构成的回文数是9009 = 91 * 99. 找出最大的有由个三位数乘积构成的回文数。

[code]Select[Union@Flatten@Map[#*Range[100, 999] &, Range[100, 999]], 
   IntegerDigits[#] == Reverse[IntegerDigits[#]] &] // Sort // Last


列表制造的那个部分好像可以写的简单些。

[code]Table[i*j, {i, 100, 999}, {j, 110, 999}]


Problem 5 Smallest multiple

2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder. What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?


译:2520是最小的能被1-10中每个数字整除的正整数。 最小的能被1-20中每个数整除的正整数是多少?

最先想到的是暴力破解,有法1:

[code]NestWhile[# + 1 &, 1, Or[! IntegerQ[#/Range[10]] &]]


写着是简单,运行了好久好久……也没出来。

貌似可以把1~20所有里面每个质因数的最高的次直接相乘。

直接参考吧,他人的法2:

[code]Times @@ Power @@@ 
  Function[p, (Select[
        Flatten[FactorInteger /@ Range[2, 20], 1], #[[1]] == p &]~
       SortBy~Last) // Last] /@ Select[Table[i, {i, 2, 20}], PrimeQ]


知道LCM(最小公倍数)的存在就变成了酱紫,心已死无力吐槽。

[code]Apply[LCM, Range[20]]


Problem 6 Sum square difference

The sum of the squares of the first ten natural numbers is, 12+22+...+102=385{ 1^2 + 2^2 + ... + 10^2}= 385 The square of the sum of the first ten natural numbers is, (1+2+...+10)2=552=3025{ (1 + 2 + ... + 10)^2}= {55^2} = 3025 Hence the difference between the sum of the squares of the first ten natural numbers and the square of the sum is 3025 − 385 = 2640. Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum.


译:前十个自然数的平方和是:12+22+...+102=385{ 1^2 + 2^2 + ... + 10^2} = 385 前十个自然数的和的平方是:(1+2+...+10)2=552=3025{ (1 + 2 + ... + 10)^2} = {55^2} = 3025 所以平方和与和的平方的差是3025 − 385 = 2640. 找出前一百个自然数的平方和与和平方的差。

暴力破解so easy,法1:

[code]Sum[i, {i, 1, 100}]^2 - Sum[i^2, {i, 1, 100}]


据数学公式k2(1+k)4−k(k+1)(2k+1)6\frac{k^2(1+k)}{4}-{k(k+1)(2k+1)\over6},有法2:

[code]k = 100;
1/4 k^2 (1 + k)^2 - 1/6 k (k + 1) (2 k + 1)


Problem 7 10001st prime

By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13. What is the 10 001st prime number?


译:前六个质数是2,3,5,7,11和13,其中第6个是13. 第10001个质数是多少?

写这个题的时候,对Mma的爱就又多了一点。

[code]Prime[10001]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: