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++
- python用輾轉相除法求最大公約數Python
- 輾轉相除法求最大公約數——[js練習]JS
- 輾轉相除法原理
- 輾轉相除法的原理
- 透徹理解輾轉相除法
- 輾轉相除法 氣泡排序排序
- 輾轉相除法原理解析
- 【C語言】聊聊輾轉相除法C語言
- C語言第七篇:輾轉相除法求最大公約數C語言
- 歐幾里德演算法(又稱輾轉相除法)求最大公約數,以及最小公倍數演算法
- javascript 生成簡單等差數列JavaScript
- 找數字;及最長等差數列分析
- 18:等差數列末項計算
- 【題解】A23329.等差數列計數
- 【演算法分析與設計】輾轉相除法演算法
- 最長等差數列;及子序列分析
- 東華 OJ 一維陣列競賽 等差數列陣列
- 線段樹維護區間等差數列
- Trick:處理加減等差數列的技巧
- 漫畫演算法:輾轉相除法是什麼鬼?演算法
- 求最大公約數不同演算法的時間比較(輾轉相除法,更相減損術等)演算法
- 2017年藍橋杯javaB組——等差素數列Java
- UVA 12716 GCD XOR (數論 gcd和異或不等式)GC
- Java 兩個整數相除保留兩位小數,將小數轉化為百分數Java
- 用Python解決一個等差數列的求和問題Python
- 數論學習筆記 (4):擴充套件歐幾里得演算法筆記套件演算法
- LeetCode 29——兩數相除LeetCode
- 第十屆藍橋杯省賽C++B組 等差數列C++
- python LeetCode 兩數相除PythonLeetCode
- 最大公約數GCDGC
- BZOJ 3357 [Usaco2004]等差數列:map優化dp優化
- 2019年省賽第十屆藍橋杯B組C/C++試題H解 等差數列C++
- 分數的GCD和LCMGC
- 最大公約數與歐幾里得演算法演算法
- 數論——數論分塊
- 求最大公公約數(最大公因數)—— 歐幾里得演算法演算法