2.标题:等差素数列
2,3,5,7,11,13,....是素数序列。
类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。上边的数列公差为30,长度为6。2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。这是数论领域一项惊人的成果!
有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:长度为10的等差素数列,其公差最小值是多少?
2,3,5,7,11,13,....是素数序列。
类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。上边的数列公差为30,长度为6。2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。这是数论领域一项惊人的成果!
有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:长度为10的等差素数列,其公差最小值是多少?
注意:需要提交的是一个整数,不要填写任何多余的内容和说明文字。
先用素数筛筛一遍把素数存入另一个数组,再对素数数组遍历
答案:210
#include<stdio.h>
int num[10000] = {1,1,0};
int ss[10000]= {0};
int len = 0;
// 素数筛
void shai(){
int i, j;
for(i = 0; i < 10000; i++){
if(num[i])
continue;
for(j = i; j*i < 10000; j++){
num[i*j] = 1;
}
ss[len++] = i;
}
}
// 寻找长度为10的等差数列的最小公差
int fun(){
int i, j, k;
for(i = 0; i < len; i++){
int kk = ss[i];
for(j = 1; j < 1000; j++){
for(k = 0; k < 10; k++){
if(num[kk + j *k]){
break;
}
}
if(k >= 10)
return j;
}
}
}
int main(){
shai();
int result = fun();
printf("%d", result);
return 0;
}