C. Row GCD codeforces
阿新 • • 發佈:2020-12-21
技術標籤:筆記
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;
}