2,3,5,7,11,13,....是素数序列。类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。上边的数列公差为30,长度为6。
2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。这是数论领域一项惊人的成果!
有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:
长度为10的等差素数列,其公差最小值是多少?
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
vector<int>arr;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
bool Prime(int n){
if(n==2)
return true;
for(int i=2;i<=sqrt(n);i++){
if(n%i==0)
return false;}
return true;
}
int main(int argc, char** argv){
for(int i=2;i<10000;i++){
if(Prime(i))
arr.push_back(i);
}
for(int i=0;i<arr.size();++i)
cout<<arr[i]<<" ";
int debug = 0;
for (int i = 1; i <= arr.size(); i++)
{
for (int tol = 1; tol <= 10000; tol++)
{
int countTol = 10;
int primeTemp = arr[i];
while (countTol--)
{
if (!Prime(primeTemp))
{
break;
}
primeTemp += tol;
if (countTol == 0)
{
cout << tol << endl;
return 0;
}
}
}
}
return 0;
}
如果用i++进行,最好是用i+=2;
这里先进行判断素数,把所有素数都存入数组,再进行primeTemp+=tol,反而增加了时间复杂度--尴尬