问题描述:
类似7,37,67,97,107,137,167,197这样由素数组成的数列叫做等差素数数列。素数数列具有项数的限制,一般指素数数列的项数有多少个这样的连续项,最多可以存在多少个连续项。
编程找出100以内的等差数列。
import java.util.ArrayList;
public class Main {
public static void main(String[]Args){
ArrayList alist = new ArrayList(100);
alist = getPrimeNum(100);
ArrayList alist2 = getSl(alist); //获取1~100内的素数 存放到数组中
for(int i=0 ; i<alist2.size() ; i++){ //循环遍历输出数组元素
System.out.println(alist2.get(i));
}
}
public static ArrayList getPrimeNum(int a){ //获取制定范围内的素数
ArrayList alist = new ArrayList(100);
for(int i=2 ; i<=a ; i++){
if(isPrimeNum(i)){
alist.add(i);
}
}
return alist;
}
public static boolean isPrimeNum(int num){ //素数的判断方法
for(int j=2 ; j<=(int)Math.sqrt(num) ; j++){
if(num%j==0){
return false;
}
}
return true;
}
public static ArrayList getSl(ArrayList alist){ //获取指定数列中的素数等差数列
int diff = 0; //公差数
int listNum = 0; //等差数列中的最后一个数字
ArrayList alist3 = new ArrayList(); //存放等差数列 的数组 以等差数列为元素
for(int i=0 ; i<=alist.size()-3 ; i++){ //遍历素数数组
for(int j=i+1 ; j<=alist.size()-2 ; j++){
diff = (int)alist.get(j)-(int)alist.get(i); //算公差
listNum = (int)alist.get(j)+diff; //求三个数
if(alist.contains(listNum)){
ArrayList alist2 = new ArrayList();
alist2.add(alist.get(i));
alist2.add(alist.get(j));
alist2.add(listNum);
for(int i2=alist.indexOf(listNum)+1 ; i2<alist.size() ; i2++){ //判断后面的数字能不能和前面的数字构成等差数列
if((int)alist.get(i2)-listNum==diff){
alist2.add(alist.get(i2));
listNum = (int) alist.get(i2);
}
}
alist3.add(alist2); //如果能的话 添加到数组中
}
}
}
return alist3; //返回该数组
}
}