输出N以内素数的方法

最近有个朋友问我"输出N以内素数的方法", 我想网上一定有很多方法, 而且代码有可能很雷同. 不过还是自己写了一段.

贪心法明显要快很多. 

代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    
    
class Program
    {
        
//普通方法
        public static List<int> GetPrimeList(int maxNum)
        {
            List
<int> primeList = new List<int>();
            primeList.Add(
2);
            
for (int onCheck = 3; onCheck <= maxNum; ++onCheck)
            {
                
bool isPrime = true;
                
for (int checker = 2; checker <= Math.Sqrt(onCheck); ++checker)
                {
                    
if (0 == onCheck % checker)
                    {
                        isPrime 
= false;
                        
break;
                    }
                }
                
if (true == isPrime)
                {
                    primeList.Add(onCheck);
                }
            }

            
return primeList;
        }

        
//贪心法
        public static List<int> GetPrimeList(int maxNum, bool useGreedy)
        {
            List
<int> primeList = new List<int>();
            
if (true == useGreedy)
            {
                
bool[] map = new bool[maxNum + 1];
                
for (int i = 2; i <= maxNum; ++i)
                {
                    map[i] 
= true;
                }
                
for (int i = 2; i <= Math.Sqrt(maxNum); ++i)
                {
                    
if (true == map[i])
                    {
                        
for (int j = i*i; j <= maxNum; j += i)
                        {
                            map[j] 
= false;
                        }
                    }
                }
                
for (int i = 2; i <= maxNum; ++i)
                {
                    
if (true == map[i])
                    {
                        primeList.Add(i);
                    }                    
                }
            }
            
else
            {
                primeList 
= GetPrimeList(maxNum);
            }

            
return primeList;
        }
        
static void Main(string[] args)
        {
            
int timeStart = DateTime.UtcNow.Minute * 60 + DateTime.UtcNow.Second;
            List
<int> primes = GetPrimeList(100000000,true);
            
int timeEnd = DateTime.UtcNow.Minute * 60 + DateTime.UtcNow.Second;
            
//foreach (int item in primes)
            
//{
            
//    Console.Write("{0},", item);
            
//}
            
//Console.Write("\n");
            Console.WriteLine("primes cont: {0}, used {1} second",primes.Count, timeEnd-timeStart);
            Console.Read();
        }
    }
}
原文地址:https://www.cnblogs.com/yakashop/p/1716106.html