蓝桥杯 等差素数列

2017 蓝桥杯 省赛 填空题 等差素数列

问题描述
 2,3,5,7,11,13,… 是素数序列。 类似:7,37,67,97,127,1577,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。

上边的数列公差为 3030,长度为 66。

20042004 年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。 这是数论领域一项惊人的成果!

有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:

长度为 1010 的等差素数列,其公差最小值是多少?

代码思路 :枚举素数作为等差数列的起点 ,然后枚举公差,判断 下一个数是不是素数 ,如果有9个这样的数(包含开头10个)就输出公差

#include
 using namespace std;
bool isPrime(int x)
{
	for(int i = 2;i * i < x; i++)
	{
	   if(x % i == 0) return false;
	}
	return true;
}
int main()
{
	for(int i = 2; i <= 100000; i ++) //枚举素数的起点 
	if(isPrime(i)) //判断这个是不是素数 是的话就作为等差数列的起点 
	{
		for(int d = 1; d <= 500; d ++)	//枚举公差 
		{
			for(int cnt = 1; cnt < 10; cnt ++) //枚举长度 
			{
				int x = i + d * cnt;
				if(!isPrime(x)){break;} //如果不是质数 则跳出枚举长度的循环 枚举下一个公差 
				if(cnt == 9){cout << d; return 0;} //到这里说明一件有10个数符合条件 
			}	
		}
	}
	return 0;
}

本题:等差素数列

你可能感兴趣的:(蓝桥杯,c++,算法,蓝桥杯)