描述 | |
---|---|
知识点 | 数组 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 | 先后输入两个int数,表示下限和上限 |
输出 | 在给定的区间范围内找出所有素数能构成的最大的等差数列 |
样例输入 | 0 30 |
样例输出 | 5 11 17 23 29 |
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int m = scanner.nextInt(); // 给定的区间下限
int n = scanner.nextInt(); // 给定的区间上限
scanner.close();
int start = 0; // 最长等差数列的起始值
int maxD = 0; // 最长等差数列的等差
int d = 0; // 等差
int cur = 0; // 当前等差数列的长度
int length = 0; // 等差数列的最终长度
for (int i = m; i <= n; i++) {
if (isPrime(i)) {
d = 1;
while (i + d <= n) {
cur = 0;
while (i + cur * d <= n && isPrime(i + cur * d)) {
cur++;
}
if (cur > length || cur == length && d > maxD) {
start = i;
maxD = d;
length = cur;
}
d++;
}
}
}
for (int i = 0; i < length; i++) {
System.out.println(start + i * maxD);
}
}
private static boolean isPrime(int num) { // 判断是否为素数
if (num < 2)
return false;
for (int j = 2; j <= Math.sqrt(num); j++) {
if (num % j == 0)
return false;
}
return true;
}
}