寻找100000以内素数(质数)

方法一

简单的质数寻找就是对1~100000的数进行遍历

方法二

这样的遍历复杂度为O(n2)
进行优化就可以发现偶数不可能为质数,因此质数也不可能含有偶数因子

方法三

经过计算发现所有的质数都满足4x+1或者4x-1
因此将其命名为模4遍历法

方法四

与方法三类似,创建了模6遍历法
以下是源代码

import java.util.ArrayList;
import java.util.List;

/**
 * Author: samsung
 * Date: 04/12/2019
 * Email: ********@foxmail.com
 **/
public class PrimeSearch {
    public static void main(String[] args){
        //寻找100000以内所有质数
        //暴力搜索
        long start1=System.currentTimeMillis();
        List list1=new ArrayList<>();
        list1.add(2);
        for(int i=3;i<=100000;++i){
            boolean flag=true;
            for(int k=2;k list2=new ArrayList<>();
        list2.add(2);
        for(int i=3;i<100000;i+=2){
            boolean flag=true;
            for(int k=3;k list3=new ArrayList<>();
        list3.add(2);
        int m=0,n=0;
        for(int i=1;m<100000||n<100000;++i){
            m=4*i-1;n=4*i+1;
            if(m<100000){
                boolean flag=true;
                for(int k=3;k list4=new ArrayList<>();
        list4.add(2);
        list4.add(3);
        m=0;n=0;
        for(int i=1;m<100000||n<100000;++i){
            m=6*i-1;n=6*i+1;
            if(m<=100000){
                boolean flag=true;
                for(int k=3;k

运行结果是

暴力傻子式遍历法:
共找到质数9592个,耗时1674ms
排除偶数和偶数因子遍历法:
共找到质数9592个,耗时661ms
模4遍历法:
共找到质数9592个,耗时661ms
模6遍历法:
共找到质数9592个,耗时655ms

由此得出结论,排除偶数因子的方法和模6模4遍历法速度基本一致

你可能感兴趣的:(寻找100000以内素数(质数))