欧拉计划之题目2:在斐波那契数列中,找出4百万以下的项中值为偶数的项之和。
2013-02-16 17:41
351 查看
---恢复内容开始---
本题来自:http://pe.spiritzhang.com/index.php/2011-05-11-09-44-54/3-24
分析:400万项之和,数太大,故使用usinged long long。
int 字节:4 取值范围:-2147438648~+2147438647
long int 字节:4 取值范围:-2147438648~+2141438647
long long int 字节:8 取值范围:-9223372036854775808~+9223372036854775807
扩展知识:long long int不是所有编译器都支持的,有些支持这种数据类型的,可能是真支持,也可能是模拟支持,总之它不是标准类型。在.NET4框架中,有64位的长整型数据,这个框架下的所有语言都能使用,但不是所有语言本身都有定义这样的数据类型,也就是说,你尽可使用_int64或System.Int64来定义64位的整数,但未必有long long这样的定义。
VS2010的.NET4中,C#语言的int是32位的,long是64位的,但其C++的int和long都是32位的,后者支持64位的long long类型。
如果在linux系统中,gcc编译,long long是C99才有的,所以gcc编译时候:
gcc -std=c99 "文件名"
分析:
思路1:逐项判断并累加。
思路2:找出相邻偶数之间的关系,如下:
序号:1 2 3 4 5 6 7 8 9 10 11
值: 2 8 34 144
由:a8 = a6 + a7
= a4 + a5 + a5 + a6
= a2 + a3 + 2a5 + a5 +a4
= a2 + 4a5
可得:
a(n+6) = a(n) + 4a(n+3)
验证:当n = 5
a11 = a5 + 4*a8 = 8 + 4*34 = 144
所以:
a(n+6) = a(n) + 4a(n+3)
解:
View Code
本题来自:http://pe.spiritzhang.com/index.php/2011-05-11-09-44-54/3-24
分析:400万项之和,数太大,故使用usinged long long。
int 字节:4 取值范围:-2147438648~+2147438647
long int 字节:4 取值范围:-2147438648~+2141438647
long long int 字节:8 取值范围:-9223372036854775808~+9223372036854775807
#include <stdio.h> #define TRUE 1 void main() { unsigned long long sum=0; //偶数和 unsigned int x=0,y=1,z,conut,conut_num;//x,y,z分别表示第一、第二、第三个数。conut表示项数,conut_num表示求和中加的次数 while(TRUE) { z=x+y; //第三个数是前两个数的和 if(z%2==0) //判断这数是不是偶数 { sum+=z; conut_num++; } conut++; x=y;y=z; if(conut>=4000000) break; } printf("共有%d个数被相加,和为%lld\n",conut_num,sum); }
扩展知识:long long int不是所有编译器都支持的,有些支持这种数据类型的,可能是真支持,也可能是模拟支持,总之它不是标准类型。在.NET4框架中,有64位的长整型数据,这个框架下的所有语言都能使用,但不是所有语言本身都有定义这样的数据类型,也就是说,你尽可使用_int64或System.Int64来定义64位的整数,但未必有long long这样的定义。
VS2010的.NET4中,C#语言的int是32位的,long是64位的,但其C++的int和long都是32位的,后者支持64位的long long类型。
如果在linux系统中,gcc编译,long long是C99才有的,所以gcc编译时候:
gcc -std=c99 "文件名"
分析:
思路1:逐项判断并累加。
思路2:找出相邻偶数之间的关系,如下:
序号:1 2 3 4 5 6 7 8 9 10 11
值: 2 8 34 144
由:a8 = a6 + a7
= a4 + a5 + a5 + a6
= a2 + a3 + 2a5 + a5 +a4
= a2 + 4a5
可得:
a(n+6) = a(n) + 4a(n+3)
验证:当n = 5
a11 = a5 + 4*a8 = 8 + 4*34 = 144
所以:
a(n+6) = a(n) + 4a(n+3)
解:
#include <stdio.h> #define MAX_NUM 4000000 //依次返回斐波那契数 int Fibo() { static int n1 = 0; static int n2 = 1; int t; t = n1 + n2; n1 = n2; n2 = t; return t; } //依次返回斐波那契数(只返回偶数) int FiboEven() { static int n1 = 2; static int n2 = 8; int t; t = n1 + 4 * n2; n1 = n2; n2 = t; return t; } int main() { /* int sum; int n; sum = 0; while ((n=Fibo()) < MAX_NUM) { if(0 == n%2) sum += n; } printf("%d\n", sum); */ int sum; int n; sum = 10; n = 0; while ((n=FiboEven()) < MAX_NUM) sum += n; printf("%d\n", sum); return 0; }
View Code
相关文章推荐
- 题目2:在斐波那契数列中,找出4百万以下的项中值为偶数的项之和。
- 题目2:在斐波那契数列中,找出4百万以下的项中值为偶数的项之和。
- 欧拉工程第2题 在斐波那契数列中,找出4百万以下的项中值为偶数的项之和
- 题目2:在斐波那契数列中,找出4百万以下的项中值为偶数的项之和。
- 欧拉工程第二题 在斐波拉契数列中找出4百万以下的项中值为偶数的项之和
- 在斐波那契数列中,找出4百万以下的项中值为偶数的项之和。
- 欧拉计划之题目1:找出1000以下自然数中3和5的倍数之和。
- 欧拉计划之题目5:找出最小的能被1-20中每个数整除的数。
- 欧拉计划之题目9:找出唯一的满足a + b + c = 1000的毕达哥拉斯三元组{a, b, c}
- 欧拉计划之题目10:计算两百万以下所有质数的和。
- 欧拉计划之题目7:找出第10001个质数
- 欧拉计划之题目3:找出一个合数的最大质数因子。
- 欧拉计划之题目4:找出由两个三位数乘积构成的回文。
- 欧拉计划之题目8:找出这个1000位数字中连续5个数字乘积的最大值
- 欧拉计划之题目6:求1到100的平方和与和平方的差是多少?
- 欧拉计划题目2
- 欧拉计划:题目3
- 题目1:找出1000以下自然数中3和5的倍数之和。
- 欧拉计划题目3
- 欧拉计划之题目12:第一个拥有超过500个约数的三角形数是多少?