等差素数列
2,3,5,7,11,13,....是素数序列。
类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。
上边的数列公差为30,长度为6。
2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。
这是数论领域一项惊人的成果!
有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:
长度为10的等差素数列,其公差最小值是多少?
注意:需要提交的是一个整数,不要填写任何多余的内容和说明文字。
【题解】
素数: 大于1的整数 ,如果除了1和他本身,不能被其他整除的数;
方法一:直接计算
长度为k的素数等差数列,它的公差d能被小于k的所有素数整除
由上可知,长度为k的素数等差数列的最小公差为小于k的所有素数之积
10以内的素数为2,3,5,7
因此公差最小值为210
方法二:暴力破解
枚举法,根据等差数列的通项公式:an=a1+(n-1)*d,可使用两重循环分别枚举数列的第一项a1和公差d,对每一项都需进行素数判定。
package 省赛._08第八届;
public class C1等差素数列 {
public static void main(String[] args) {
int num = 100000;
out:
for(int i=2; i<=num; i++) { //a1
if(f(i)) {
for(int j=1; j<=num; j++) { //d
if(f(i) && f(i+j) && f(i+2*j) && f(i+3*j) && f(i+4*j) && f(i+5*j) && f(i+6*j) && f(i+7*j) && f(i+8*j) && f(i+9*j)) {
System.out.println(j);
break out;
}
}
}
}
}
//判断是否是素数
public static boolean f(int n) {
for(int i=2; i<=Math.sqrt(n); i++)
if(n%i==0) return false;
return true;
}
}
结果
210