WUSTOJ n個素數構成等差數列

2021-10-10 20:52:22 字數 1577 閱讀 1960

time limit: 1 sec

memory limit: 128 mb

64bit io format: %lld

有n個素數(均小於m)可以構成乙個等差數列。請編寫程式根據給定的n和m,統計出滿足條件的解有多少種。

例如,n=3,m=10;即在1到10的範圍內有3個素數構成等差數列的情況有幾組解,很顯然3,5,7是一組解,也是唯一的一組。

#include

int main()

return 0;

}包含多組測試資料,每組測試資料佔一行,每行2個正整數,分別代表n和m,其中n大於等於3且小於等於10,m小於等於1000。

每組測試資料輸出佔一行,每行輸出乙個整數,即滿足條件的解的組數。

sample input

3 10

sample output

1選用c語言作答

分析

因為資料有界,首先可以把1000以內的素數進行打表,利用陣列儲存,節省計算時間。

在查詢的過程中一定牽扯到遍歷的方法,要選取適當的方法減少計算時間。

通過查詢可知1000以內的素數共有168個,這裡我將a[0]=0是為了陣列的下標和素數相對應。並且可以得出結論等差數列的公差d最大為997-2=995(以首位素數差當作界點的最大公差)。項數為3,公差最小的等差數列為(3,5,7),此時公差為2。整個過程中滿足,2<=d<=995,壓縮d的取值區間。

int a[

169]

=;

利用陣列下標表示素數,用(0,1)區分是否為素數

int b[

1001];

for(i=

1;i<=

1000

;i++

) b[i]=0

;for

(i=1

;i<=

168;i++

) b[a[i]]=

1;

使用while語句進行狀態讀取,即『 0 』為非素數,『 1 』為素數,並且沿順序繼續讀取下去。同時在掃瞄素數的時候,可以減少最後一組等差數列判斷,即只掃到169-m即可。

因為要求的等差數列有項數要求,所以用計數器,我這裡用的是count。

題目的m,n有點混亂,注意辨析。

intf(

int m,

int n)

;int i;

int b[

1001];

for(i=

1;i<=

1000

;i++

) b[i]=0

;for

(i=1

;i<=

168;i++

) b[a[i]]=

1;int j,count,d,sum=0;

for(i=

1;i<=

169-m;i++

) j +

= d;

} d++;}

}return sum;

}

構成設計的五個層次

構成設計的五個層次 1 戰略層 明確商業目標和使用者目標,重點是解決兩者之間的衝突,找到平衡點。2 範圍層 做好需求採集工作,確定功能範圍和需求優先順序。這時候先要盡可能多的收集,通過各種市場研究 使用者研究的方法收集,不要遺漏 3 結構層 完成資訊架構與互動設計。4 框架層 介面設計 導航設計 資...

jzxx1100等差素陣列

題目描述 如果兩個素數之和的一半仍然是乙個素數,則這三個素數可以組成乙個等差素陣列,如 3 7 2 5,則 3,5,7 為乙個等差素陣列,程式設計求100以內的所有等差素陣列。這裡列出的3 5 7是符合題目要求的第乙個等差素陣列。輸入無輸出 若干行,每行3個數。空格隔開!每行的三個數從小到大排列,先...

藍橋杯2017 等差素數列

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