2017第八届蓝桥杯(C/C++ B组)C语言解法---等差数列

标题:等差素数列

2,3,5,7,11,13,…是素数序列。
类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。
上边的数列公差为30,长度为6。

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

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

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

C语言代码如下:
思路:此题应用等差数列的性质出发,设第一个素数为n,则下面的素数为n+d,n+2d,n+3d…,然后分别判断这十个数是否为素数,若存在十个相连的素数则输出公差,结束程序。(本方法采用for循环遍历,故第一个输出的d为最小值,此时结束程序有利于节省运行时间)

答案 210

#include<stdio.h>
#define N 1000
#include<stdlib.h>
int isprime(long long n)//判断是否为素数 
{
	int i;
	for(i=2;i<=n;i++)
	{
		if(n%i==0)
		break;
	}
	if(i>=n)
	return 1;
	else 
	return 0;
}
int main()
{
	long long n,d;//首项和公差 
	for(n=2;n<N;n++)
	{
		for(d=1;d<N;d++)
		{
			if((isprime(n)*isprime(n+d)*isprime(n+2*d)*
			    isprime(n+3*d)*isprime(n+4*d)*isprime(n+5*d)*
				isprime(n+6*d)*isprime(n+7*d)*isprime(n+8*d)*
				isprime(n+9*d))==1) {
				//如果满足10个相连的等差数列都是素数则输出并结束程序,
				//因为最小,所以无需在进行运行了 
				printf("%lld\t%lld\n",n,d);
				exit(0);}
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42552533/article/details/84887437