def get_divide_list(num): result = [] for i in range(1,int(num**0.5)+1): if not num%i: result.extend([i,num//i]) result = list(set(result)) result.remove(1) return result N = int(input()) arr = list(map(int,input().split())) X = int(input()) X_list = get_divide_list(X) answer = 0 cnt = 0 for num in arr: for x_num in X_list: if not num%x_num: break else: answer += num cnt += 1 print(answer/cnt)
이 문제 또한, 소수를 구하면 된다. 약수를 구할때, 구하고자하는 수의 sqrt만
탐색을 해주면 좀 더 빠르게 할 수 있다는 점을 생각하고 풀면 편한다.
만약 1을 제외한 약수들을 구한뒤, 약수로 나뉘면, 멈추는 방식으로 해서, 평균을 구했다.
사실 python 유저라면 gcd 라이브러리를 쓰는게 편하다!
아니면 gcd를 구현해도 된다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 21922 학부 연구생 민상 (0) | 2021.06.10 |
---|---|
[BOJ/백준] 21921 블로그 (0) | 2021.06.10 |
[BOJ/백준] 21919 소수 최소 공배수 (0) | 2021.06.10 |
[BOJ/백준] 21918 전구 (0) | 2021.06.10 |
[BOJ/백준] 17470 배열 돌리기 5 (0) | 2021.06.10 |