《P13014 [GESP202506 五级] 最大公因数》

📅 2026/7/12 1:53:01
《P13014 [GESP202506 五级] 最大公因数》
题目背景对应的选择、判断题试题 - GESP 202506 C 五级 - 洛谷有题题目描述对于两个正整数 a,b他们的最大公因数记为 gcd(a,b)。对于 k3 个正整数 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≤1031≤q≤10。对于所有测试点保证 1≤n≤1051≤q≤1051≤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; vectorint 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; }