Python
from math import gcd
import sys
#전체적인 해법 + 인사이트
#https://pangsblog.tistory.com/62
n = int(sys.stdin.readline())
array = []
for _ in range(n):
array.append(int(sys.stdin.readline().rstrip()))
array.sort()
t = array[0]-array[1]
for i in range(1, len(array)):
t = gcd(t, array[i]-array[i-1])
answer = []
answer.append(t)
# O(N^1/2)로 약수 구하기
# https://minnit-develop.tistory.com/16
for i in range(2, int(t**(1/2))+1):
if t % i == 0:
answer.append(i)
if ( (i**2) != t ) :
answer.append( t // i)
answer.sort()
print(*answer)
참고
알고리즘 해법 + 인사이트:
https://pangsblog.tistory.com/62
최소한의 시간복잡도로 약수 구하기:
https://minnit-develop.tistory.com/16
'알고리즘 > 백준 ~ 단계별 풀어보기' 카테고리의 다른 글
백준 1269 "대칭 차집합" (0) | 2022.08.13 |
---|---|
백준 1764 "듣보잡" (0) | 2022.08.04 |
백준 10816 "숫자 카드2" (0) | 2022.07.20 |
백준 1620 "나는야 포켓몬 마스터 이다솜" (0) | 2022.07.18 |
백준 11651 "좌표 정렬하기 2" (0) | 2022.07.18 |