标题:等差素数列 2,3,5,7,11,13,....是素数序列。 类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。 上边的数列公差为30,长度为6。 2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。 这是数论领域一项惊人的成果!
有这一理论为基础,请你借助手中的计算机,满怀信心地搜索: 长度为10的等差素数列,其公差最小值是多少?
注意:需要提交的是一个整数,不要填写任何多余的内容和说明文字。
算出素数列表后,递增公差和初值查找满足连续10项的等差素数数列。
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<math.h>
#define ASMAX 100000
bool arr[ASMAX]={false};
bool check(int num)
{
for(int i=2;i<=(int)sqrt(num);i++)
if(num%i==0)
return false;
return true;
}
int main(int argc,char **argv)
{
int index=2;
while(index<ASMAX)
{
if(check(index))
arr[index]=true;
else
arr[index]=false;
index++;
}
for(int d=1;d*10<ASMAX;d++)
{
for(int sp=0;(sp+9*d)<ASMAX;sp++)
{
int k;
for(k=0;k<10;k++)
{
if(!arr[sp+k*d])
break;
}
if(k==10)
printf("d=%d sp=%d\n",d,sp);
}
}
return EXIT_SUCCESS;
}
在100000以内查找,得到结果。
d=210 sp=199
d=420 sp=52879
d=2100 sp=34913
d=4830 sp=30427
d=7770 sp=28549
--------------------------------
Process exited after 5.819 seconds with return value 0
最小公差:210