Project Euler 09 找出 2百万 以内的质数和

来源:互联网 发布:用友u8用什么数据库 编辑:程序博客网 时间:2024/06/04 01:22

解题思路,先找质数,放在列表里,然后列表求和,注意 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();        }    }}


0 0
原创粉丝点击