P1865 A % B Problem
P1865 A % B Problem
题意简述
求区间
解析
前置知识:
- 素数判断 / 素数筛法
- 前缀和
质数是指在大于
的自然数中,除了 和它本身以外不再有其他因子的自然数。
一层循环判断
设
因此,可以只判断
static boolean isPrime(int n) {
if (n == 1) return false;
for (int i = 2, sq = (int) Math.sqrt(n); i <= sq; ++i) {
if (n % i == 0) return false;
}
return true;
}
那如何处理 区间素数个数呢?
常规的思路是对每次询问的区间进行素数判断并求个数
但是对于
import java.util.Scanner;
public class Main {
static boolean isPrime(int n) {
if (n == 1) return false;
for (int i = 2, sq = (int) Math.sqrt(n); i <= sq; ++i) {
if (n % i == 0) {
return false;
}
}
return true;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(), m = sc.nextInt();
boolean[] a = new boolean[m + 1];
for (int i = 1; i <= m; ++i) {
a[i] = isPrime(i);
}
while (n-- != 0) {
int l = sc.nextInt(), r = sc.nextInt();
if (1 <= l && l <= r && r <= m) {
int sum = 0;
for (int i = l; i <= r; ++i) {
if (a[i]) {
++sum;
}
}
System.out.println(sum);
} else {
System.out.println("Crossing the line");
}
}
}
}
但是在求区间内素数时,仍然有大量重复循环,每次都进行了区间的累加
我们考虑改变询问的式子
可以看到变成
若定义
因此,我们可以预处理出
前缀和的定义如下:
对于一个给定的数列
,它的前缀和数列 中的第 项表示从第 个元素到第 个元素的总和,即 定义 区间
的和为 ,则有如下式子
Code
import java.util.Scanner;
public class Main {
static boolean isPrime(int n) {
if (n == 1) return false;
for (int i = 2, sq = (int) Math.sqrt(n); i <= sq; ++i) {
if (n % i == 0) return false;
}
return true;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(), m = sc.nextInt();
int[] a = new int[m + 1];
for (int i = 1; i <= m; ++i) {
if (isPrime(i)) a[i] = 1;
}
// 求 素数个数 的前缀和
for (int i = 1; i <= m; ++i) {
a[i] += a[i - 1];
}
while (n-- != 0) {
int l = sc.nextInt(), r = sc.nextInt();
if (1 <= l && l <= r && r <= m) {
System.out.println(a[r] - a[l - 1]);
} else {
System.out.println("Crossing the line");
}
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)