大家好,我是你们的晴天学长,质数的考察在蓝桥杯中已经是常客了,其著名的埃式筛和欧拉筛在质数运用中也非常的广泛,今天的题目中特别考察了对于复杂度的判断及其运用,需要的小伙伴请自取哦!💪💪💪
1 ).小蓝做实验
2 ) . 代码示例
package LanQiaoTest.素数_质数和公约数和质因数;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;
public class 小蓝做实验 {
static int N = 1000000010;
static final int n = (int) 1e8;
static boolean[] st = new boolean[N];
static List<Integer> list = new LinkedList<>();
//io流
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\Users\\Asher\\IdeaProjects\\JavaPractice\\src\\LanQiaoTest\\素数_质数和公约数和质因数\\primes")));
init();
long ans = 0;//统计答案
while (true) {
String s = br.readLine();//读取一行的数据
if (s == null) break;
//一定要开long,因为int只能到1e8
long v = Long.parseLong(s);
if (v > n) {
if (check(v)) ans++;
} else if (!st[(int) v]) {
ans++;
}
System.out.println(ans);
}
}
//预处理 埃式筛 1e8是可以接受的
//st[i]为ture,说明i不是质数
static void init() {
for (int i = 2; i <=n; i++) {
if (st[i]) continue;
list.add(i);
for (int j = i + i; j <= n; j += i) {
st[j] = true;
}
}
}
//判断单个数是否是质数 0 (根号n) 1e6
static boolean check(long v) {
for (int i = 2; i <= v / i; i++) {
if (v % i == 0) return false;
}
return true;
}
}
3 ) . 总结
- 算法题中,应首先知道自己的算法的复杂度是否对应题目的要求。
- 欧拉筛和埃氏筛的运用。
- 质数的预处理
题目链接:小蓝做实验