C++等差數列(數論、歐幾里得輾轉相除gcd)
數學老師給小明出了一道等差數列求和的題目。
但是粗心的小明忘記了一部分的數列,只記得其中 N
個整數。
現在給出這 N個整數,小明想知道包含這 N個整數的最短的等差數列有幾項?
輸入格式
輸入的第一行包含一個整數 N。
第二行包含 N個整數 A1,A2,⋅⋅⋅,AN。(注意 A1∼AN並不一定是按等差數列中的順序給出)
輸出格式
輸出一個整數表示答案。
資料範圍
2≤N≤100000,0≤Ai≤109
輸入樣例:
5
2 6 4 10 20
輸出樣例:
10
樣例解釋
包含 2、6、4、10、20
的最短的等差數列是 2、4、6、8、10、12、14、16、18、20。
想要數列長度最短,就要公差最大,公差最大能取除第一項外各項與第一項之差的最大公約數。
AC程式碼:
#include<stdio.h>
#include<algorithm>
int n;
int a[100010];
int gcd(int a,int b)
{
int d;
if(a<b) std::swap(a,b);
while(b)
{
d=a%b;
a=b;
b=d;
}
return a;
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;++i) scanf("%d",&a[i]);
std::sort(a,a+n);
int d=a[1]-a[0];
for(int i=2;i<n;++i) d=gcd(d,a[i]-a[0]);
if(!d) printf("%d",n);
else printf("%d",(a[n-1]-a[0])/d+1);
return 0;
}
相關文章
- 輾轉相除法(歐幾里得演算法)(gcd)模板及其原理演算法GC
- [待更新]歐幾里得演算法(輾轉相除法)與擴充歐幾里得演算法演算法
- 求最大公約數(輾轉相除法)
- C++中的輾轉相除法C++
- 輾轉相除法
- 數論學習筆記 (4):擴充套件歐幾里得演算法筆記套件演算法
- 輾轉相除法原理
- 輾轉相除法的原理
- 求最大公公約數(最大公因數)—— 歐幾里得演算法演算法
- 擴充套件歐幾里得套件
- 輾轉相除法 氣泡排序排序
- 輾轉相除法原理解析
- 透徹理解輾轉相除法
- 輾轉相除法與更相減損術(求最大公約數)
- 25.【等差數列】
- 【C語言】聊聊輾轉相除法C語言
- 歐幾里得演算法與 EX演算法
- 萬能歐幾里得演算法演算法
- Python如何用歐幾里得求逆元Python
- 28、(向量)歐幾里得距離計算
- 【題解】A23329.等差數列計數
- CCF NOI 1028 判斷互質 :利用歐幾里得演算法最大公因數演算法
- 【演算法分析與設計】輾轉相除法演算法
- 類歐幾里得演算法學習筆記演算法筆記
- 演算法設計與分析-01歐幾里得演算法
- 淺談擴充套件歐幾里得演算法套件演算法
- 第六章 數學問題 -------- 6.5 歐幾里得演算法及其擴充套件演算法套件
- 證明:輾轉相除法與更相減損術
- 樹上的等差數列 [樹形dp]
- 找到相加等於2021的等差數列
- 第六章 數學問題 -------- 6.7【擴充套件歐幾里得】一步之遙套件
- 東華 OJ 一維陣列競賽 等差數列陣列
- 擴充套件歐幾里得演算法公式快速推導套件演算法公式
- 洛谷 P6362 平面歐幾里得最小生成樹
- 線段樹維護區間等差數列
- Trick:處理加減等差數列的技巧
- 尤拉函式、整除分塊和擴充套件歐幾里得函式套件
- 求最大公約數不同演算法的時間比較(輾轉相除法,更相減損術等)演算法