1.8 KiB
1.8 KiB
GESP202506 第2题题解
一、题目描述
1.1 问题大意
给定n个正整数a₁,a₂,…,aₙ,以及q组询问。对于每组询问i(1≤i≤q),请输出gcd(a₁+i,a₂+i,…,aₙ+i)的值,也就是所有数加上i后的最大公约数。
1.2 输入格式
第一行,两个正整数n和q,分别表示给定正整数的数量,以及询问的组数。 第二行,n个正整数a₁,a₂,…,aₙ。 接下来q行,每行包含一个正整数i,表示每组询问的参数。
1.3 输出格式
输出q行,每行包含一个正整数,表示第i组询问对应的所有数加i后的最大公约数。
二、解题思路
2.1 数学原理
这道题的关键在于利用一个重要的数学性质:
对于任意正整数x,有: gcd(a₁+x, a₂+x, ..., aₙ+x) = gcd(gcd(a₂-a₁, a₃-a₁, ..., aₙ-a₁), a₁+x)
这个性质的证明如下:
- 设d = gcd(a₁+x, a₂+x, ..., aₙ+x)
- 则d整除(a₂+x)-(a₁+x) = a₂-a₁,同理d整除a₃-a₁, ..., aₙ-a₁
- 因此d整除gcd(a₂-a₁, a₃-a₁, ..., aₙ-a₁)
- 同时d整除a₁+x
- 所以d整除gcd(gcd(a₂-a₁, a₃-a₁, ..., aₙ-a₁), a₁+x)
- 反过来,设g = gcd(gcd(a₂-a₁, a₃-a₁, ..., aₙ-a₁), a₁+x)
- 则g整除a₁+x,且g整除所有的a_i-a₁
- 因此g整除(a₁+x)+(a_i-a₁) = a_i+x,对所有i成立
- 所以g整除gcd(a₁+x, a₂+x, ..., aₙ+x)
- 综上,两者相等
2.2 算法思路
-
-
- 实际上,根据数学性质,只需要计算所有元素与第一个元素差的GCD
- 但计算相邻元素差的GCD可以更高效地得到相同的结果
-