• 素数模版


    欧拉筛和埃氏筛法求素数模版

    public class Prime {
    
        public boolean[] visit; //true代表不是素数,false代表是素数
        public int[] prime; //记录着每一个质数值
        public int cnt = 0; //记录质数的个数
    
        //欧拉筛的时间复杂度O(n),每个数只筛一次,使用最小的质因子去筛
        public void Euler(int n) {
            visit = new boolean[n + 1];
            prime = new int[n + 1];
            visit[1] = true; //true不是质数
            for (int i = 2; i <= n; ++i) {
                if (visit[i] == false) //判定是否为素数
                    prime[++cnt] = i; //i是一个素数,存入prime数组中
                for (int j = 1; j <= cnt && i * prime[j] <= n; ++j) { //用已得到的素数去筛,并且不越界
                    visit[i * prime[j]] = true; //将最小质因子是prime[j]的数筛掉
                    if (i % prime[j] == 0) break; //如果prime[j]是i的最小质因数,则直接结束循环(如果不结束就会重复筛)
                }
            }
        }
    
    
        //埃氏筛法有重复筛同一个数,时间复杂度为O(n*log(log(n)))
        void Eratosthenes(int n) {
            prime = new int[n + 1];
            for (int i = 2; i <= n; i++) {
                if (prime[i] == 0) prime[++prime[0]] = i;
                for (int j = 1; j <= prime[0] && prime[j] <= n / i; j++) {
                    prime[prime[j] * i] = 1;
                    if (i % prime[j] == 0) break;
                }
            }
            cnt = prime[0];
        }
    
        public static void main(String[] args) {
            Prime p = new Prime();
            p.Euler(100);
            for (int i = 1; i <= p.cnt; i++) {
                System.out.print(p.prime[i] + ",");
            }
    
            p.Eratosthenes(100);
            for (int i = 1; i <= p.cnt; i++) {
                System.out.print(p.prime[i] + ",");
            }
        }
    }
  • 相关阅读:
    eclipse中文乱码问题解决方案
    修改Tomcat的JDK目录
    Tomcat 5.5 修改服务器的侦听端口
    HTML DOM教程 27HTML DOM Button 对象
    HTML DOM教程 24HTML DOM Frameset 对象
    Navicat for MySQL v8.0.27 的注册码
    HTML DOM教程 25HTML DOM IFrame 对象
    Tomcat 5.5 的下载和安装
    android manifest相关属性
    ubuntu10.04 下 eclipse 小结
  • 原文地址:https://www.cnblogs.com/zhihaospace/p/12807998.html
Copyright © 2020-2023  润新知