1. 程式人生 > >2017第八屆藍橋杯(C/C++ B組)C語言解法---等差數列

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;
}