标题:等差素数列
2,3,5,7,11,13,....是素数序列。
类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。
上边的数列公差为30,长度为6。
2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。
这是数论领域一项惊人的成果!
有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:
长度为10的等差素数列,其公差最小值是多少?
注意:需要提交的是一个整数,不要填写任何多余的内容和说明文字。
1 #include<iostream> 2 3 using namespace std; 4 5 bool isPrime(int n) //判断是否为素数 6 { 7 if(n == 0 || n == 1) 8 return false; 9 if(n == 2) 10 return true; 11 12 for(int i = 2; i < n; ++i) 13 { 14 if(n % i == 0) 15 return false; 16 } 17 return true; 18 19 } 20 21 int prime[100000]; //用于保存所有素数 22 23 int main() 24 { 25 int index = 0; 26 for(int i = 2; i <= 100000; ++i) 27 { 28 if(isPrime(i)) 29 { 30 prime[index] = i; //将素数都保存在prime数组中 31 index++; 32 } 33 } 34 35 //对素数数组中的所有数进行枚举 36 for(int i = 0; i <= index; ++i) //i表示素数数组的下标 37 { 38 for(int d = 3; d <= 500; ++d) //d为公差 39 { 40 int j; 41 //首先判断prime[i]+d是否是素数,如果是,继续判断prime[i]+2*d是否是素数,依次类推,连续10次 42 for(j = 0; j < 10; ++j) 43 if(!isPrime(prime[i] + j*d)) 44 break; 45 46 if(j == 10) 47 { 48 cout << d << endl; 49 return 0; 50 } 51 } 52 } 53 54 55 return 0; 56 }
最终结果:210