我无法确定下面提供的代码失败的测试用例。 问题:
此问题的所有提交均可用。
Shridhar希望为他的密码系统生成一些素数。帮助他! 您的任务是生成两个给定数字之间的所有素数。 输入
第一行包含t,测试用例的数量(小于或等于10)。
其后是包含两个数字m和n(1 <= m <= n <= 1000000000,n-m <= 100000)的t行,用空格分隔。 输出
对于每个测试用例,打印所有素数p,使得m <= p <= n, 每行一个数字。用空行分隔每个测试用例的答案。 实施例
Input:
2
1 10
3 5
Output:
2
3
5
7
3
5
import java.util.Scanner;
public class Main implements Runnable {
public static void main(String args[]) {
new Main().run();
}
@Override
public void run() {
Scanner sc = new Scanner(System.in);
Integer d;
try {
d = sc.nextInt();
boolean isPrime[] = new boolean[100000];
for (int i = 0; i < d; i++) {
int m = sc.nextInt();
int n = sc.nextInt();
if (n <= 0 || m > n) {
continue;
}
if (m <= 0) {
m = 2;
if (m > n) {
continue;
}
}
if (m == 1) {
m = 2;
}
if (m == 2 && n - m == 0) {
System.out.println(2);
} else {
for (int k = 0; k <= n - m; k++) {
isPrime[k] = true;
}
int sqrt = (int) Math.sqrt(n);
for (int j = 2; j <= sqrt; j++) {
int k = (m % j == 0) ? m / j : (m + j) / j;
for (; k <= n / j; k++) {
if (!(m == 2 && (j * k == 2)) && k != 1) {
isPrime[j * k - m] = false;
}
}
}
for (int a = m; a <= n; a++) {
if (isPrime[a - m]) {
System.out.println(a);
}
}
}
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
sc.close();
}
}
}
答案 0 :(得分:0)
你的问题是:
boolean isPrime[] = new boolean[100000];
和此:
for (int k = 0; k <= n - m; k++) {
isPrime[k] = true;
}
因为某个时间n - m = 100000
那么你需要isPrime[100000]
你没有分配所以你需要像这样声明isPrime:
boolean isPrime[] = new boolean[100001];