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