Java实现欧拉筛与花里胡哨求质数高级大法的对比

我也不清楚这是什么高级算法,欧拉筛是昨天有位大佬,半夜无意间告诉我的
欧拉筛:
主要的含义就是我把这个数的所有倍数都弄出来,然后下次循环的时候直接就可以跳过了

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;

public class 求指数 {

public static	ArrayList<Integer> list = new ArrayList<Integer>();
	public static void main(String[] args) {
		long start = System.currentTimeMillis();
		int [] num =getPrime(10000);
//		for (int i :num) {
//			System.out.print(i+" ");
//		}
		long end = System.currentTimeMillis();
		System.out.println();
		System.out.println(end-start);
		

		long start1 = System.currentTimeMillis();
		zhishu(10000);
//		for (int i :list) {
//			System.out.print(i+" ");
//		}
		long end1 = System.currentTimeMillis();
		System.out.println();
		System.out.println(end1-start1);
	}
	//神秘求质数,我也不清楚叫什么名字
	public static void zhishu(int n){
		A:	for (int i = 2; i <n; i++) { 
				int sqrt=(int) Math.sqrt(i);
				for(int num:list){
					if(i%num==0){
						continue A;
					}
					else if(num>sqrt)
						break;
				}
				list.add(i);
			}
		}
	//欧拉筛
	public static int [] getPrime(int n) {
		int [] list=new int[n+1];
		int [] prime =new int[n+1];
		int count=0;
		for(int i =2;i<=n;i++) {
			if(list[i]==0)prime[count++]=i;
			for(int j=0;j<count&&i*prime[j]<=n;j++) {
				list[prime[j]*i]=1;
			}
			
		}
		
		return Arrays.copyOf(prime, count);
		
	}

}

结果如图所示:
在这里插入图片描述
显而易见的,还是欧拉筛顶

(ง •_•)ง

原文地址:https://www.cnblogs.com/a1439775520/p/13075212.html