'commit'
This commit is contained in:
40
GESP/Level5/GESP202506/T2.md
Normal file
40
GESP/Level5/GESP202506/T2.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# 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 算法思路
|
||||
1. 1.
|
||||
首先对数组a进行排序(排序不是必须的,但有助于理解算法)
|
||||
2. 2.
|
||||
计算所有相邻元素差的GCD,记为g
|
||||
- 实际上,根据数学性质,只需要计算所有元素与第一个元素差的GCD
|
||||
- 但计算相邻元素差的GCD可以更高效地得到相同的结果
|
||||
3. 3.
|
||||
对于每个查询x,计算gcd(g, a[1]+x),即为答案
|
||||
Reference in New Issue
Block a user