zoukankan      html  css  js  c++  java
  • 素数筛法(模板)

    质数:在大于1的整数中,如果只包含1和本身这两个约数,那么就是素数

    试除法:

     时间复杂度 O(sqrt(n))

    代码:

    static boolean prime(int n){
            if(n < 2) return false;
            for(int i = 2; i <= n/i; i++){//因为i能被整除,那么n/i肯定也能被n整除
                if(n % i == 0) return false;
            }
            return true;
        }

    线性欧拉筛:

    合数只会被它的最小质因子筛掉

    时间复杂度:O(n)

            static final int N=;
            static int prime[]=new int[N];
            static boolean vis[]=new boolean[N];
            static int cnt=0;
            static void get_primes(int n){
                for(int i=2;i<=n;i++){
                        if(!vis[i]) prime[cnt++]=i;
                        for(int j=0;j<cnt && prime[j]*i<=n;j++){
                                vis[i*prime[j]]=true;
                                if(i%prime[j]==0) break;//prime[j]是i的最小质因子,那么prime[j]肯定也是i*prime[j]的最小质因子
                        }
                }
            }

    埃式筛法:

    时间复杂度: O(n*loglogn)在N=10^6,时间和线性欧拉筛法差不多,但是10^7线性欧拉筛法就快了一倍

    一个数为素数,那么它的倍数肯定不是素数

    代码:

            static final int N=;
            static int prime[]=new int[N];
            static boolean vis[]=new boolean[N];
            static int cnt=0;
            static void get_primes(int n){
                    for(int i=2;i<=n;i++){
                            if(!vis[i]){
                                    vis[i]=true;
                                    prime[cnt++]=i;
                                    for(int j=i+i;j<=n;j+=i)
                                         vis[j]=true;
                            }
                    }
            }                    
  • 相关阅读:
    C# 如何生成CHM帮助文件
    Excel导出问题
    JS一些类实现方式的性能研究
    Date对象的一些相关函数
    ECMASCRIPT5新特性(转载)
    javascript apo
    $linq A Javascript LINQ library
    javascript 编程规范
    flash 工程师的标准
    flash 弹出 网页
  • 原文地址:https://www.cnblogs.com/qdu-lkc/p/12259173.html
Copyright © 2011-2022 走看看