等差素數列

2021-07-25 23:45:19 字數 1925 閱讀 5424

小於10的素數中有3、5、7組成等差數列,在30以內的素數中,有5、11、17、23、29組成等差數列;

在指定區間[x,y]如果存在成等差數列的n(n>=3)個素數,試求n的最大值,並輸出乙個最多項數的等差素數列;

1.設計要點:

(1)、標註素數;

通過m迴圈列舉指定區間[x,y]內的奇數,應用試商法探求素數,設定a陣列並通過a[m]=1標註奇數m為素數;

(2)、掃瞄等差數列;

設定d迴圈(2~(y-x)/2,遞增2)列舉公差d,k迴圈(x~y-2*d)列舉首項k;通過這二重迴圈掃瞄首項為k,公差為d的等差數列;

(3)、探求等差素數列的項數;

設定j是首項為k,公差為d的等差數列的項,通過條件為「a[j]==1」的條件迴圈探求等差素數列的項數s;

(4)、比較求取項數最大值;

項數s與max比較求得等差素數列的項數最大值max,並記錄首項k1與公差d1;

最後輸出項數最大值max,輸出最大項數等差素數列k1+j*d1(j=0,1,……,max-1);

2.等差素數列程式設計:

#include#includeint main()

if(t==0)

a[m]=1; /*標註奇數m為素數*/

}max=0;

for(d=2;d<=(y-x)/2;d+=2)

for(k=x;k<=y-2*d;k=k+2) /*列舉首項k及公差d*/

if(s>max) /*比較等max最大值並記錄*/

}if(max>2)

else

printf("區間[%d,%d]內沒有找到等差素數列!\n",x,y);

}

3.程式執行示例:

請輸入區間下,上限x,y(y<10000):100,3000

區間[101,3000]內等差素數列最多有10項:

199 409 619 829 1039 1249 1459 1669 1879 2089

4.改進搜尋等差素數列:

(1)、改進要點;

當所有區間中的整數比較大時,以區間中的整數字陣列下標可能超出下標限制,為減輕a陣列下標太大的壓力,求出區間[x,y]中的奇數個數n+1,a陣列只標註這些奇數的序號:

同時,為擴大搜尋範圍,相關變數設定為長整型;

設定d,k二重迴圈掃瞄等差數列與上面相同,但探求等差數列的項數有變化:

j=k;c=d/2;s=0;          /*引進變數c,以便與a陣列相匹配*/

while(a[j]==1)

(2)、程式設計:

#include#includeint main()

if(t==0)

a[k]=1; /*第k(0,1,...,n)個奇數m為素數*/

}max=0;

for(d=2;d<=(y-x)/2;d+=2)

for(k=0;k<=n-2;k++)

if(s>max) /*比較得max最大值並記錄*/

}if(max>2)

else

printf("區間[%ld,%ld]內沒有找到等差素數列! \n",x,y);

}

(3)、程式執行示例:

請輸入區間下,上限x,y(y<=30000):10000,30000

區間[10001,30000]內等差素數列最多有9項:

10859 11069 11279 11489 11699 11909 12119 12329 12539

等差素數列

2,3,5,7,11,13,是素數序列。類似 7,37,67,97,127,157 這樣完全由素數組成的等差數列,叫等差素數數列。上邊的數列公差為30,長度為6。2004年,格林與華人陶哲軒合作證明了 存在任意長度的素數等差數列。這是數論領域一項驚人的成果!有這一理論為基礎,請你借助手中的計算機,滿...

等差素數列

2,3,5,7,11,13,是素數序列。類似 7,37,67,97,127,157 這樣完全由素數組成的等差數列,叫等差素數數列。上邊的數列公差為30,長度為6。2004年,格林與華人陶哲軒合作證明了 存在任意長度的素數等差數列。這是數論領域一項驚人的成果!有這一理論為基礎,請你借助手中的計算機,滿...

等差素數列

2,3,5,7,11,13,是素數序列。類似 7,37,67,97,127,157 這樣完全由素數組成的等差數列,叫等差素數數列。上邊的數列公差為30,長度為6。2004年,格林與華人陶哲軒合作證明了 存在任意長度的素數等差數列。這是數論領域一項驚人的成果!有這一理論為基礎,請你借助手中的計算機,滿...