gcd(a,b)=gcd(b,a−b)
gcd(a,b)=gcd(b,a%b)
辗转相减法 o(logn)
辗转相除法 o(n)
C. Row GCD
一维差分+辗转相减法
#include <iostream>
#include <map>
#include <queue>
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
const int mod=1e9+7;
typedef long long ll;
map<string, int>mp;
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
ll a[maxn];
int main() {
int n,m;cin>>n>>m;
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
ll g=0;
for(int i=1;i<n;i++) g=__gcd(a[i]-a[i-1],g);
for(int i=0;i<m;i++){
ll x;cin>>x;
cout<<__gcd(x+a[0],g)<<" ";
}
return 0;
}