《P13014 [GESP202506 五级] 最大公因数》
2026/7/12 1:52:58 网站建设 项目流程

题目背景

对应的选择、判断题:试题 - GESP 202506 C++ 五级 - 洛谷有题

题目描述

对于两个正整数 a,b,他们的最大公因数记为 gcd(a,b)。对于 k>3 个正整数 c1​,c2​,…,ck​,他们的最大公因数为:

gcd(c1​,c2​,…,ck​)=gcd(gcd(c1​,c2​,…,ck−1​),ck​)

给定 n 个正整数 a1​,a2​,…,an​ 以及 q 组询问。对于第 i(1≤i≤q) 组询问,请求出 a1​+i,a2​+i,…,an​+i 的最大公因数,也即 gcd(a1​+i,a2​+i,…,an​+i)。

输入格式

第一行,两个正整数 n,q,分别表示给定正整数的数量,以及询问组数。

第二行,n 个正整数 a1​,a2​,…,an​。

输出格式

输出共 q 行,第 i 行包含一个正整数,表示 a1​+i,a2​+i,…,an​+i 的最大公因数。

输入输出样例

输入 #1复制

5 3 6 9 12 18 30

输出 #1复制

1 1 3

输入 #2复制

3 5 31 47 59

输出 #2复制

4 1 2 1 4

说明/提示

对于 60% 的测试点,保证 1≤n≤103,1≤q≤10。

对于所有测试点,保证 1≤n≤105,1≤q≤105,1≤ai​≤1000。

代码实现:

#include <bits/stdc++.h> using namespace std; typedef long long ll; int gcd(int a, int b) { return b ? gcd(b, a % b) : a; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, q; cin >> n >> q; vector<int> a(n); for (int i = 0; i < n; i++) cin >> a[i]; int D = 0; if (n > 1) { for (int i = 1; i < n; i++) { D = gcd(D, abs(a[i] - a[0])); } } for (int i = 1; i <= q; i++) { int val = a[0] + i; if (n == 1) { cout << val << '\n'; } else { cout << gcd(D, val) << '\n'; } } return 0; }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询