아이디어
a_{1} \div d = p_{1} \cdots left
a_{2} \div d = p_{2} \cdots left
a_{3} \div d = p_{3} \cdots left
둘의 차를 구해보면?
(a_{1} - a_{2}) = d \cdot (p_{1} - p_{2})
(a_{2} - a_{3}) = d \cdot (p_{2} - p_{3})
즉, 차들의 공약수가 d임을 알 수 있다.
푸는 방법
- 수를 정렬한다.
- 각 수들의 차를 구한다
- 차들의 최대공약수를 구한다.
- 그 최대공약수의 약수들을 구한다.
코드
python
"""검문"""
n = int(input())
number, gap = [], []
for _ in range(n):
number.append(int(input()))
number.sort()
for i in range(1, n):
gap.append(number[i] - number[i-1])
# 최대공약수 구하기
def find_gcd(a, b):
while b > 0:
a, b = b, a % b
return a
def gcd_n(arr):
gcd = arr[0]
for item in arr:
gcd = find_gcd(gcd, item)
return gcd
x = gcd_n(gap)
ans = []
# 약수 구하기
for i in range(2, x+1):
if x % i == 0:
ans.append(i)
for i in ans:
print(i, end=" ")