ProjectEuler做题笔记(第1,2题)
2011-01-15 22:26
351 查看
第一题:找出1000内能被3或5整除的所有数的总和。
第一反应是,循环,判断是否能被3或5整除,能的话就加到一个变量中,代码如下:
经测试,当计算1000000内的结果时,方法二比方法一要快将近10倍,数据量越大差距越明显。
当然最逆天的算法是用等差数列求和,3+6+9+。。。。+999+5+10+15+。。。。+995-15-30-....-990
大致浏览了下官方答案和老外的留言,没有特别的解法。
最后答案是233168
第二题:计算斐波那契数列不超过400万的数中,所有偶数的总和。
斐波那契数列就是1 2 3 5 8 13 21 34 55 89 144。。。。。每项等于前2项之和。
首先想到的是用递推,将值都存到数组中,同时将偶数累加到一个变量,代码如下:
同事提出的一种算法是:观察该数列可以得到
1 2 3 5 8 13 21 34 55 89 144
奇 偶 奇 奇 偶 奇 奇 偶 奇 奇 偶
除了1与2,后面的数都是奇奇偶,这不难证明,因为奇+偶=奇,奇+奇+偶
于是3以后的所有偶数之和等于3以后所有数(最后一个数也要是偶数)之和除以2
比如:8+34+144=(3+5+8+13+21+34+55+89+144)/2
结合方法2,可以省掉循环中取模的操作,提高一点效率,代码如下:
当然斐波那契数列有通项公式,这个数列当然也能算出通项公式,最后算出求和公式,这是最逆天的做法了。
通项公式解法如下:
B(n)=4B(n-1)+B(n-2)
算了半小时才算出来,快算疯了!!!!!求和公式实在不知道怎么算了,不算了!!
这道题最后答案是4613732
第一反应是,循环,判断是否能被3或5整除,能的话就加到一个变量中,代码如下:
static void p1_2() { int max = 1000; int sum = 0; for (int i = 3; i < max; i += 3) { sum += i; } for (int i = 5; i < max; i += 5) { sum += i; } for (int i = 15; i < max; i += 15) { sum -= i; } Console.WriteLine(sum); }
经测试,当计算1000000内的结果时,方法二比方法一要快将近10倍,数据量越大差距越明显。
当然最逆天的算法是用等差数列求和,3+6+9+。。。。+999+5+10+15+。。。。+995-15-30-....-990
大致浏览了下官方答案和老外的留言,没有特别的解法。
最后答案是233168
第二题:计算斐波那契数列不超过400万的数中,所有偶数的总和。
斐波那契数列就是1 2 3 5 8 13 21 34 55 89 144。。。。。每项等于前2项之和。
首先想到的是用递推,将值都存到数组中,同时将偶数累加到一个变量,代码如下:
static void p2_2() { int sum = 0; int a = 1, b = 2; sum += 2; while (b<4000000) { int c = a + b; a = b; b = c; if (c % 2 == 0) { sum += c; } } Console.WriteLine(sum); }
同事提出的一种算法是:观察该数列可以得到
1 2 3 5 8 13 21 34 55 89 144
奇 偶 奇 奇 偶 奇 奇 偶 奇 奇 偶
除了1与2,后面的数都是奇奇偶,这不难证明,因为奇+偶=奇,奇+奇+偶
于是3以后的所有偶数之和等于3以后所有数(最后一个数也要是偶数)之和除以2
比如:8+34+144=(3+5+8+13+21+34+55+89+144)/2
结合方法2,可以省掉循环中取模的操作,提高一点效率,代码如下:
static void p2_4() { int sum = 0; int a = 2, b = 8; sum = a; while (b < 4000000) { sum += b; int c = 4 * b + a; a = b; b = c; } Console.WriteLine(sum); }
当然斐波那契数列有通项公式,这个数列当然也能算出通项公式,最后算出求和公式,这是最逆天的做法了。
通项公式解法如下:
B(n)=4B(n-1)+B(n-2)
算了半小时才算出来,快算疯了!!!!!求和公式实在不知道怎么算了,不算了!!
这道题最后答案是4613732
相关文章推荐
- [CodeVS3013]单词背诵 做题笔记
- [BZOJ3238][Ahoi2013]差异 做题笔记
- 第三次做题笔记
- bc#29 做题笔记
- 淘宝段正淳的css笔记大全第1/4页
- C++ 牛客网做题笔记【1000题总结】
- [HDU3966]Aragorn's Story 做题笔记
- MySQL服务维护笔记第1/2页
- Python笔记(按做题时认知先后排序)
- hdu ---2022做题笔记(c++)
- 伟东山视频自学笔记——第9课第3节 u-boot分析之源码第1阶段(1)
- hdu ACM Steps 做题笔记(Chapter One)
- 机器学习菜鸟笔记-第1课-python数据分析相关环境搭建
- Perl5 OOP学习笔记第1/2页
- c++ primer 学习笔记(1): 第1-5章
- 第1课 Scala入门与实战笔记总结
- [POJ2406]Power Strings 做题笔记
- 揭开AJAX神秘的面纱(AJAX个人学习笔记)第1/5页
- [BZOJ]2733永无乡 做题笔记
- [POJ2887]Big String 做题笔记