Problem 2

来源:互联网 发布:ping监控软件 编辑:程序博客网 时间:2024/05/11 23:02

Each new term in theFibonacci sequence is generated by adding the previous two terms. By startingwith 1 and 2, the first 10 terms will be:

1, 2, 3, 5, 8, 13,21, 34, 55, 89, ...

Find the sum of allthe even-valued terms in the sequence which do not exceed four million.

 

Fibonacci序列中的每一个新元素都是前两个元素之和。由12开始,前十个元素为:

1, 2, 3, 5, 8, 13,21, 34, 55, 89, ...

找到这个序列中所有不超过4百万的偶数元素之和。

 

最简单的方法:

对一个Fibonacci序列循环,判断当前值是否是偶数,如果是偶数,加入到总和里,一直加到当前元素值大于4百万。

  1. def fibsum1(n):
  2.     sum = 0
  3.     a, b = 12
  4.     while b < n:
  5.         if (b%2 == 0):
  6.             sum += b
  7.         a, b = b, a+b
  8.     return sum
 

还有稍微复杂点的方法:

可以观察到,在该序列中每隔2个数为偶数,所以只要循环的时候加两次就可以了,这样能够避免取余的操作了。

  1. def fibsum2(n):
  2.     sum = 0
  3.     a = 1
  4.     b = 1
  5.     c = a + b
  6.     while c < n:
  7.         sum = sum + c
  8.         a = b + c
  9.         b = c + a
  10.         c = a + b
  11.     return sum
 

在这个问题的相应回帖中,贴出了一个python的解答。

每隔两个奇数有一个偶数,则可以看出Fibonacci序列为:

x, y, x + y, x + 2y, 2x + 3y, 3x + 5y

前两个奇数为x,y时,后两个奇数为x+2y, 2x+3y 每个偶数为前两个奇数的和。所以程序可为:

  1. def fibsum3(n):
  2.     x = y = 1
  3.     sum = 0
  4.     while (y < n):
  5.         sum += (x + y)
  6.         x, y = x + 2 * y, 2 * x + 3 * y
  7.      return sum
 

进行一下测试,

  1. if __name__ == '__main__':
  2.     print fibsum1(4000000)
  3.     print fibsum2(4000000)
  4.     print fibsum3(4000000)

结果是:4613732

原创粉丝点击