Problem 10
Summation of primes
The sum of the primes below 10 is 2+3+5+7=17.
Find the sum of all the primes below two million.
质数求和
所有小于10的质数的和是2+3+5+7=17。
求所有小于两百万的质数的和。
/*
* Program 1
* 思路:
* 1.遍历范围内的每个数,判断是否是质数
* 2.将这些质数求和
* 收获:
* 评价:
* 优点:
* 1.思路简单易懂
* 缺点:
* 1.没能找到判断质数的高效办法
* 2.遍历了范围内的素数
* 3.求和可能发生数据溢出
* 4.如果所给范围突破数据类型的存储极限,此程序将无法运行
*/
#define _CRT_SECURE_NO_WARNINGS
#define MAX 2000000 // 2 000 000
#include <stdio.h>
#include <math.h>
/*---------------------------------------------------------------*/
//判断整型数字 num是否是质数
//返回值
// 1 num是质数
// 2 num不是质数
//注意:若 num为负数,则返回 0
short IsPrimeNum(int num)
{
int i = 2;
if (num < 2 || num == 4 || num == 9)
{
return 0;
}
for (i = 2; i <= sqrt(num); i++)
{
if (num % i == 0)
{
break;
}
}
if (i >= sqrt(num))
{
return 1;
}
return 0;
}
int main()
{
unsigned long long sum = 0;
for (int i = 2; i <= MAX; i++)
{
if (IsPrimeNum(i))
{
sum += i;
}
}
printf("%lld\n", sum);
return 0;
}