题目:
等差素数列
2,3,5,7,11,13,....是素数序列。
类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。
上边的数列公差为30,长度为6。
2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。
这是数论领域一项惊人的成果!
有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:
长度为10的等差素数列,其公差最小值是多少?
注意:需要提交的是一个整数,不要填写任何多余的内容和说明文字。
210
示例代码:
/**
* 这是我的测试文档
* @Author: QianQian
* @CreateDate: 2019/11/19 11:18
* @UpdateUser: QianQian
* @UpdateDate: 2019/11/19 11:18
* @UpdateRemark: 修改内容
* @Version: 1.0
*/
public class Main {
public static void main(String[] args) {
int[] len = new int[1000]; //获取大小为1000的素数数组
int i = 0;
int j = 2;
while (i < len.length) {
if (isPrime(j)) {
len[i] = j;
i++;
}
j++;
}
for (int q = 1; q < 10000; q++) {
hello(len, 10, q);
}
}
public static void hello(int[] a, int len, int q) { //传入数组和等差数列长度和公差,如果该等差数列存在则输出该数列
for (int i = 0; i < a.length; i++) { //从不同的点往后查询
if (deomtwo(a, i, len, q) == 1) {
print(a, len, i, q);
}
}
}
public static void print(int[] a, int len, int start, int q) { //在判断存在的情况下输出序列
for (int i = 0; i < len; i++) {
System.out.print(a[start] + q * i + " ");
}
System.out.println();
}
public static int deomtwo(int[] a, int now, int len, int q) { //判断在数组a中,是否存在起始位置为now,长度为len,公差为q的等差序列,如果存在,则返回该值的位置,不存在返回0
for (int i = 0; i < len - 1; i++) {
int m = deom(a, now, q);
if (m == 0) {
return 0;
}
now = m;
}
return 1;
}
public static int deom(int[] a, int now, int q) { //判断在数组a中,是否存在a[now]+q,如果存在,则返回该值的位置,不存在返回0
for (int i = now + 1; i < a.length; i++) {
if (a[i] == a[now] + q) return i;
}
return 0;
}
/**
* 判断一个数是否为素数
* @param a
* @return
*/
public static boolean isPrime(int a) {
for (int i = 2; i < a; i++) {
if (a % i == 0) return false;
}
return true;
}
}