2017第八屆藍橋杯(C/C++ B組)C語言解法---等差數列
阿新 • • 發佈:2019-01-07
標題:等差素數列
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; }