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 |