• 素数筛法(模板)


    质数:在大于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;
                            }
                    }
            }                    
  • 相关阅读:
    Docker 优化NUXT镜像体积
    Android 执行shell命令 非root
    Mac M1 汉化 postman V9.12.2
    Html Websocket
    test
    天上五朵云,飘啊飘
    IVIEW 评分组件 Rate 介绍
    进行中 10% 手机Root安装银河麒麟ARM系统,或其它的CentOS系统
    Blender 动画demo体后感
    学习桌面时钟过程中遇到的问题
  • 原文地址:https://www.cnblogs.com/qdu-lkc/p/12259173.html
Copyright © 2020-2023  润新知