小於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年,格林與華人陶哲軒合作證明了 存在任意長度的素數等差數列。這是數論領域一項驚人的成果!有這一理論為基礎,請你借助手中的計算機,滿...