[Project Euler] 来做欧拉项目练习题吧: 题目010
[Project Euler] 来做欧拉项目练习题吧: 题目010
周银辉
问题描述:
he sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.
Find the sum of all the primes below two million.
问题分析:
求小于2000000的所有素数之和。
非常简单,还记得第7题的“筛法求素数”吧, 采用相同的方法就可以了,在建立素数缓冲区的过程中随便累计一下就是该题的答案了。
#include <stdio.h>
#include <stdlib.h>
long long getSum(int n)
{
	long long sum = 0;
	char *array=(char*) malloc(n+1);
	int i;
	for(i=0; i<n+1; i++)
	{
		array[i]='r';   //'r' : remain
	}
	array[0]='d';         //'d' : delete
	array[1]='d';
	int p=2;
	while(p*p<=n)
	{
		if(array[p]=='r')
		{
			int j;
			for(j=2; j*p<=n; j++)	
			{
				array[j*p]='d';
			}
		}
		p++;
	}																											
	for(p=2; p<=n; p++)
	{
		if(array[p]=='r')
		{
			sum += p;
		}
	}		
	free(array);
	return sum;
}
int main()
{
	int max=2000000;
	long long sum = getSum(max);
	printf("sum of the prime numbers under %d is %lld\n", max, sum);
	return 0;
}
注:当完成题目后,对于某些题,官方网站会给出参考答案,在我的博客里不会将官方答案贴出来,仅仅会写下我自己当时的思路,除非两者不谋而合。另外,如果你有更好的思路,请留言告诉我,我非常乐意参与到讨论中来。
推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架