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();
            }
        }
    }
  • 相关阅读:
    postgres column reference "id" is ambiguous
    网络 内网穿透frp
    odoo12 支付宝在线支付
    odoo 账号登录不上,重置密码也不管用
    odoo 取消保存提示
    聊聊redis分布式锁的8大坑 转载
    用 Keepalived+HAProxy 实现高可用负载均衡的配置方法 转载
    Nginx+keepalived 实现高可用,常用防盗链及动静分离配置 转载
    Git 实用技巧记录 转载:https://mp.weixin.qq.com/s/o6FvGfiG9b57xTeXlBzzQQ
    5 个冷门但非常实用的 Kubectl 使用技巧,99% 的人都不知道 https://mp.weixin.qq.com/s/h4_KRmsVSnlqCmIJh0altA
  • 原文地址:https://www.cnblogs.com/yakashop/p/1716106.html
Copyright © 2011-2022 走看看