package example100;
import java.util.ArrayList;
import java.util.List;
/**
* 等差素数序列
* @author spenglu
*
*/
public class EqualPrimeSequence {
public static void main(String[] args) {
//要求的素数的范围
int n=100;
//用于存储100以内的素数
ArrayList<Integer> primes = getPrimes(n);
//获取等差数列
getEqualPrimesSequence(primes);
}
private static void getEqualPrimesSequence(ArrayList<Integer> primes) {
// TODO Auto-generated method stub
int size = primes.size();
//用于存储等差数列
ArrayList<Integer> equalPrimesSequenceArrayList = new ArrayList<Integer>();
//计算等差数列的项数
int count=1;
//公差
int i;
int j;
int num;
for(i=2;i<50;i++){
for(j=0;j<size;j++){
num = primes.get(j);
equalPrimesSequenceArrayList.add(num);
//判断num是否在primes列表里面
inPrimes(i, num, primes, equalPrimesSequenceArrayList);
if (equalPrimesSequenceArrayList.size()>=3) {
for (int k = 0; k < equalPrimesSequenceArrayList.size(); k++) {
System.out.print(equalPrimesSequenceArrayList.get(k)+" ");
}
System.out.print("公差为:"+i);
System.out.println();
equalPrimesSequenceArrayList.clear();
}
}
}
}
//判断等差数是否在素数列表里,是的话就保存在prime列表中
private static void inPrimes(int distance,int num, ArrayList<Integer> primes,ArrayList<Integer> equalPrimesSequenceArrayList) {
// TODO Auto-generated method stub
num = num+distance;
for(int i=0;i<primes.size();i++){
if (num==primes.get(i)) {
equalPrimesSequenceArrayList.add(num);
inPrimes(distance, num, primes, equalPrimesSequenceArrayList);
} else if (num<primes.get(i)) {
//如果num的值比primes.get(i)小结束循环
if (equalPrimesSequenceArrayList.size()<3) {
equalPrimesSequenceArrayList.clear();
}
return;
} else if (num>primes.get(primes.size()-1)) {
if (equalPrimesSequenceArrayList.size()<3) {
equalPrimesSequenceArrayList.clear();
}
return;
}
}
}
//获取素数
private static ArrayList<Integer> getPrimes(int n) {
// TODO Auto-generated method stub
ArrayList<Integer> mPrimes = new ArrayList<Integer>();
mPrimes.add(2);
int i;
for(i=3;i<=100;i++){
if (!divisible(i,mPrimes)) {
mPrimes.add(i);
}
}
return mPrimes;
}
//判断i是否是素数,通过判断i是否能够整除小于它的素数,能整除则i不是素数,否者i是素数
private static boolean divisible(int i, ArrayList<Integer> mPrimes) {
// TODO Auto-generated method stub
int size = mPrimes.size();
int j;
for(j=0;j<size;j++){
if (i%mPrimes.get(j)==0) {
return true;
}
if (mPrimes.get(j)>Math.sqrt(i)) {
break;
}
}
return false;
}
}
用java实现100以内的素数所组成的等差数列
最新推荐文章于 2024-05-15 10:17:33 发布