문제📖
![](https://velog.velcdn.com/images%2Fcosmos%2Fpost%2F6fe2c5a1-84e4-4da8-9eae-83a79936058a%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-06-03%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2010.54.42.png)
풀이🙏
- 첫째 줄에 종이에 적은 수의 개수 N이 주어진다.
- 다음 줄부터 N개의 줄에는 종이에 적은 수가 하나씩 주어진다.
- 같은 수가 두 번 이상 주어지지 않는다.
- 항상 M이 하나 이상 존재하는 경우만 입력으로 주어진다,.
- 상근이는 심심하다
- 상근이는 N을 M으로 나누었을 때, 나머지가 모두 같게 되는 M을 모두 찾으려고 한다.
- 가능한 M을 모두 찾는 프로그램을 작성하라.
- M을 공백으로 구분하여 모두 출력하라. 이 때, M은 오름차순 정렬되어야 한다.
코드💻
import sys
def gcd(x, y):
while y != 0:
x,y = y,x%y
return x
def solve(n, l):
for i in range(n-1):
l[i] = abs(l[i+1] - l[i])
l.pop()
number = l[0]
for i in l:
number = gcd(number, i)
answer = set([number])
for i in range(2, 1 + int(number**(1/2))):
if number%i == 0:
answer.add(i)
answer.add(number//i)
return ' '.join(map(str, sorted(answer)))
N = int(sys.stdin.readline())
l = [int(sys.stdin.readline()) for _ in range(N)]
print(solve(N, l))
결과😎
![](https://velog.velcdn.com/images%2Fcosmos%2Fpost%2F4a838421-ed3c-4cb9-8001-d98877a93f84%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-06-03%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2011.39.34.png)
출처 && 깃허브📝
https://www.acmicpc.net/problem/2981
github