持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情
本文已参与「新人创作礼」活动,一 起开启掘金创作之路。
A. Row GCD
题意
给你两个正整数序列a1,...,an和b1,...,bm。对于每个j=1,...,m,求a1+bj,...,an+bj的最大公约数。
解法
因为 所以
由此可见
我们只需要先处理
然后对于与每次的bi请求只用求与a1+x的gcd即可
Code
int a[N];
void solve()
{
int n,m; cin >> n >> m;
rep(i,n) cin >> a[i];
int gcd = a[2] - a[1];
if(n == 1) {
rep(i,m) {
int x; cin >> x;
cout << x + a[1] << ' ';
}
cout << endl;
return;
}
rep(i,n-1) gcd = __gcd(gcd,a[i+1]-a[i]);
rep(i,m) {
int x; cin >> x;
cout << abs(__gcd(gcd,a[1] + x)) << ' ';
}
cout << endl;
}