2,3,5,7,11,13,....是素数序列。
类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。
上边的数列公差为30,长度为6。
2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。
这是数论领域一项惊人的成果!
有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:
长度为10的等差素数列,其公差最小值是多少?
注意:需要提交的是一个整数,不要填写任何多余的内容和说明文字。
类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。
上边的数列公差为30,长度为6。
2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。
这是数论领域一项惊人的成果!
有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:
长度为10的等差素数列,其公差最小值是多少?
注意:需要提交的是一个整数,不要填写任何多余的内容和说明文字。
分析:蓝桥杯省赛题,我的思路,利用素数筛选方法先将表处理出来,然后枚举公差值,求解这个数列的每一项是否都在素数表里面,看代码:
import java.util.*;
public class Main{
static Scanner in = new Scanner(System.in);
static int maxn = 10000;
static boolean[] vis = new boolean[maxn];
//打素数表
static void slove(){
for(int i = 1;i < maxn;i++ ){
if(i%2==0) vis[i] = false;
else vis[i] = true;
}
vis[2] = true;
for(int i = 3;i <= Math.sqrt(maxn);i+=2){
if(vis[i]){
for(int j = i+i;j < maxn;j+=i){
vis[j] = false;
}
}
}
}
public static void main(String[] args) {
slove();
int i,j,k;
int max_cha = 100;
for( i = 2; i<= max_cha;i++){//枚举差值,这个差一开始不确定,可以多测试几个数
for( j = 2; j < maxn - (j+9*i) ;j++){//注意越界问题
if(vis[j]){
for(k = 1;k <= 9;k++)//依次判断等差数列的各项是否都在素数表里面
if(!vis[j+k*i])
break;
if(k>9){//找到退出即可
j = -1;break;
}
}
}
if(j==-1)
break;
}
if(i <= max_cha)
System.out.println(i);
else
System.out.println("NoAnswer");
}
}