Java实现 埃筛

思路:如果一个数是质数,那么它的倍数一定不是质数

import java.math.*;
import java.util.*;
import javax.swing.Spring;

public class Main {
	final static int maxn = (int) (1e6 + 5);
	static int[] vis = new int[maxn];

	static int gcd(int a, int b) {/// 欧几里得辗转相除法
		return b == 0 ? a : gcd(b, a % b);
	}

	public static void sieve(int N) {
		for(int i = 0;i <= N;i++)
			vis[i] = 1;
		vis[0] = 0;
		vis[1] = 0;
		vis[2] = 1;
		for (int i = 2; i <= N; i++) {
			if(vis[i] == 1) {
				for(int j = 2 * i;j <= N;j += i) {
					vis[j] = 0;
				}
			}
		}
	}

	public static void main(String[] args) {
//		int[] book = new int[maxn];
		long[] a = new long[maxn];
//		int[] b = new int[maxn];
		Scanner cin = new Scanner(System.in);
//		Map map = new HashMap();
//		Set<Character> s = new HashSet<>();
//		Set<Set<Character>> ss = new HashSet<>();
		// System.out.println(String2);
		// String String2 = cin.next();
//		char []a = String2.toCharArray();// 字符串拆分成数组
		while (cin.hasNext()) {
			int n = cin.nextInt();
			sieve(n);
			for(int i = 1; i <= n;i++) {
				if(vis[i] == 1)
					System.out.println(i);
			}
		}
	}
}
发布了244 篇原创文章 · 获赞 8 · 访问量 5119

猜你喜欢

转载自blog.csdn.net/weixin_43960370/article/details/103106463