您的位置:首页 > 其它

求指定范围中的素数的等差数列

2016-03-16 15:40 246 查看
想了一下,没有想出更好的办法,就只能这么多层循环一下。

import java.util.ArrayList;
import java.util.Scanner;

public class Main {

public static boolean isPrime(int a) {
if (a == 1) {
return false;
}
for (int i = 2; i <= Math.sqrt(a); i++) {
if (a % i == 0) {
return false;
}
}
return true;
}

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int left = scanner.nextInt();
int right = scanner.nextInt();
ArrayList<Integer> array = new ArrayList<Integer>();
for (int i = left; i <= right; i++) {
if (isPrime(i)) {
array.add(i);

}
}
//求出所有的差值,保存在一个二维数组里面
int arrayLen = array.size();
int[][] result = new int[arrayLen][arrayLen];
for (int i = 0; i < arrayLen; i++) {
for (int j = i + 1; j < arrayLen; j++) {
result[i][j] = array.get(j) - array.get(i);
}
}
ArrayList<Integer> maxIndex = new ArrayList<Integer>();
//开始遍历二维数组,得到最长的序列
int max = 1;
for (int i = 0; i < arrayLen; i++) {
if ((i + max)>arrayLen) {
break;
}
for (int j = i + 1; j < arrayLen; j++) {
ArrayList<Integer> tempIndex = new ArrayList<Integer>();
int difference = result[i][j];
int m = i;
int n = j;
int sum = 1;
tempIndex.add(i);
tempIndex.add(j);
while (n != arrayLen-1) {
boolean find = false;
for (int k = n; k < arrayLen; k++) {
if (result
[k] == difference) {
m = n;
n = k;
find = true;
tempIndex.add(k);
sum++;
break;
}else if (result
[k] > difference) {
break;
}
}
if (!find) {
break;
}

}
if (sum > max) {
maxIndex = (ArrayList<Integer>) tempIndex.clone();
max = sum;
}
}
}

for (int i = 0; i < maxIndex.size(); i++) {
if (i != (maxIndex.size()-1)) {
System.out.print(array.get(maxIndex.get(i))+" ");
}else {
System.out.print(array.get(maxIndex.get(i)));
}

}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: