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;
                            }
                    }
            }                    
  • 相关阅读:
    mysql中txt的导入及导出
    邮箱手机正则
    用yum安装完mysql后没有mysqld的问题
    利用php在图片上写字(中英文)
    修改MYSQL密码及权限
    mysql 索引!
    MySQL对表的复制,修改及删除
    防止表单重复提交!
    Linux学习篇SVN命令详解
    Linux 安装PHP配置参数
  • 原文地址:https://www.cnblogs.com/qdu-lkc/p/12259173.html
Copyright © 2011-2022 走看看