zoukankan      html  css  js  c++  java
  • 输出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();
            }
        }
    }
  • 相关阅读:
    “Clang” CFE Internals Manual---中文版---"Clang"C语言前端内部手册
    LLVM每日谈之十七 LLVM/Clang的学习的思考
    Using Clang as a Library----Choosing the Right Interface for Your Application---翻译
    IT人员必备技能之Over the Wall.
    离散傅立叶变换之听声音破解电话号码
    Google Summer of Code: C++ Modernizer Improvements----Monday, November 18, 2013
    Design: cpp11-migrate
    C++11 迁移器的状态--2013年4月15日
    购物系统③完结篇
    (转)Eclipse中junit框架的使用——单元测试
  • 原文地址:https://www.cnblogs.com/yakashop/p/1716106.html
Copyright © 2011-2022 走看看