解题思路,先找质数,放在列表里,然后列表求和,注意 int 形式的变量 储存范围大概 2 亿左右,要小心数据溢出。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
namespace ProjectEuler10
{
class Program
{
static void Main(string[] args)
{
int t1 = Environment.TickCount;
//==================================找出num以内的所有奇数=========================================
int num = 2000000; // The range in which we find prime numbers
BitArray isPrime = new BitArray(num,true); //默认所有的数都是质数
var numlist = Enumerable.Range(1, num).ToList();
List<int> PrimeList = new List<int>(){};
for (int i = 2; i < num; i++)
{
if (isPrime[i]) // 如果是质数的话,就加入质数列表
{
PrimeList.Add(i);
}
for (int j = 0; j < PrimeList.Count()&&i *PrimeList[j]<num; j++)
// 关键点1:一个数乘以比他小的质数,得到的一定是合数,并且要保证乘积小于我们要找的最大值
{
isPrime[i * PrimeList[j]] = false;
}
}
//==============================求出奇数的和=====================================
decimal sum = 0;
foreach (var item in PrimeList)
{
sum += item;
}
//PrimeList.ForEach(Console.WriteLine);
Console.WriteLine("sum is " + sum);
Console.WriteLine("Tid"+(Environment.TickCount-t1));
Console.ReadLine();
}
}
}