【題目來源】
https://www.luogu.com.cn/problem/P13014
【題目描述】
對于兩個正整數 ,他們的最大公因數記為
。對于
個正整數
,他們的最大公因數為:
給定 個正整數
以及
組詢問。對于第
組詢問,請求出
的最大公因數,也即
。
【輸入格式】
第一行,兩個正整數 ,分別表示給定正整數的數量,以及詢問組數。
第二行, 個正整數
。
【輸出格式】
輸出共 行,第
行包含一個正整數,表示
的最大公因數。
【輸入樣例】
5 3
6 9 12 18 30
【輸出樣例】
1
1
3
【說明/提示】
對于 60% 的測試點,保證 1≤n≤10^3,1≤q≤10。
對于所有測試點,保證 1≤n≤10^5,1≤q≤10^5,1≤ai≤1000。
【算法分析】
● “輾轉相除法”求最大公約數:https://blog.csdn.net/hnjzsyjyj/article/details/145671149
● 最大公約數性質:
【算法代碼】
#include <bits/stdc++.h>
using namespace std;const int maxn=1e5+5;
int a[maxn];
int n,q,t;int gcd(int a,int b) {if(b==0) return a;return gcd(b,a%b);
}int main() {scanf("%d%d",&n,&q);for(int i=1; i<=n; i++) {scanf("%d",&a[i]);}sort(a+1,a+n+1);for(int i=2; i<=n; i++) {t=gcd(t,a[i]-a[i-1]);}for(int i=1; i<=q; i++) {printf("%d\n",gcd(t,a[1]+i));}return 0;
}/*
in:
5 3
6 9 12 18 30out:
1
1
3
*/
【參考文獻】
https://blog.csdn.net/hnjzsyjyj/article/details/145671149
https://blog.csdn.net/hnjzsyjyj/article/details/136276606
?