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();
            }
        }
    }
  • 相关阅读:
    spring aop简单理解
    动态代理
    静态代理
    spring的i o c简单回顾
    java注解的概念理解
    Eclipse中配置Tomcat
    java中Optional和Stream流的部分操作
    java中的stream的Map收集器操作
    java中的二进制运算简单理解
    Class.forName和ClassLoader.loadClass区别(转)
  • 原文地址:https://www.cnblogs.com/yakashop/p/1716106.html
Copyright © 2011-2022 走看看