• 输出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();
            }
        }
    }
  • 相关阅读:
    Expression Blend实例中文教程(13)
    Expression Blend实例中文教程(12)
    Expression Blend实例中文教程(11)
    【转】Python3中urllib详细使用方法(header,代理,超时,认证,异常处理)
    cookie
    【转】cookielib模块
    代理的步骤
    urllib.parse.urlencode
    urllib.request.Request
    【转】python3 urllib.request 网络请求操作
  • 原文地址:https://www.cnblogs.com/yakashop/p/1716106.html
Copyright © 2020-2023  润新知