原题地址 http://projecteuler.net/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,。。。

考虑斐波那契数中不超过4000000的数,求这些数中所有偶数的和。

解法:

这题不多说,关键是生成斐波那契数列,这里使用了一个迭代器的技巧。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/python
# -*- coding:utf-8 -*-
'''
Created on 2013-4-26

@author: shilong
@email: long470884130@163.com
'''


def fibonacci():
"""一个迭代函数,每次得到一个斐波那契数,依次将得到1, 2, 3, 5..."""
a = 1
b = 1
while True:
yield a
a, b = a + b, a

if __name__ == "__main__":
fi = fibonacci()
s = 0
while True:
n = next(fi)
if n >= 4000000:
break
if n % 2 == 0:
s += n
print s

决定以后有空时就翻译欧拉工程,从今天开始。不知道应不应该把解法贴出来,有点损人品了,还是决定贴吧。

原文链接 http://projecteuler.net/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.

3和5的倍数

如果我们列出10以内是3或者5的倍数的自然数,我们将得到3,5,6和9.这些倍数的总和是23.

求1000以内3或者5的倍数的总和。

解答:

最直接的方法,判断[1, 1000)中的自然数,将是3或者5的倍数相加,Python就一句

1
print sum([i for i in xrange(1, n) if i % 3 == 0 or i % 5 == 0])

还有一种更简便的方法,可以直接用笔算出来。例如求[1, 1000)中3的倍数的和,
这里3的倍数是3,6,9,。。。,999。也就是3 1,3 2,3 3,。。。3 333。所以求得1 + 2 + 。。。+ 333后乘以3就得到了最终结果,写成Python代码如下。

1
sum(xrange(1, 1 + (1000 - 1) / 3)) * 3

昨天去找堂姐,看到堂姐买给她儿子的玩具,其中一个是放格子玩具。也就是在一个有6 6,一共36格的盒子中,放入6个1,6个2,6个3,。。。,6个6,使得各行各列的数字不重复。这个挺简单的,于是对它进行扩展,也就是在各行各列的数字不重复的基础上,还要求斜边不重复,当场没做出来,回来之后写程序。想起了以前的八皇后问题,运行了一下
N皇后问题解的个数
1 1
2 0
3 0
4 2
5 10
6 4
7 40
8 92
9 352
10 724
11 2680
12 14200
13 73712
14 365596
15 2279184
16 14772512
17 95815104
发现六皇后问题,只有4个解,所以断定上面的扩展问题无解。不知道上面的数字有什么规律。顺便做了以下两个问题。
问题1
在n
n个格子里填入 n 个1,n个2,。。。 n 个 n使得各行各列出现的数字不重复
如在3 3的格子中填入
1 2 3
3 1 2
2 3 1
这个就可以满足条件
问对于1
1, 2 2 ,3 3, …, 6 6分别有几种填法?
解答如下
1 1
2 2
3 12
4 576
5 161280
由于6
6 时解的个数已经很多,程序跑的很慢,所以这个次数还不知道。

问题2
在n n个格子里填入 n 个1,n个2,。。。 n 个 n使得各行各列,以及斜边出现的数字不重复
此时对于3
3的格子中填入
1 2 3
3 1 2
2 3 1
这个就不可以满足条件了,因为从左上角往右下角方向看,有3 3,1 1 1,2 2 在同一条直线上。
而对于 5 5的格子中填入
1 2 3 4 5
3 4 5 1 2
5 1 2 3 4
2 3 4 5 1
4 5 1 2 3
这个就可以满足条件了。
问对于1
1, 2 2 ,3 3, …, 6 * 6分别有几种填法?
解答如下
1 1
2 0
3 0
4 0
5 240
6 0