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
def gcd(a,b):
if (a%b==0):
return b
else:
return gcd(b,a%b)
N = int(input())
arr =list(map(int,input().split()))
arr.sort()
left_side = [0]*N
right_side = [0]*N
left_idx = 0
right_idx = 1
left_side[0] = arr[0]
right_side[-1] = arr[-right_idx]
for _ in range(N-1):
left_gcd = gcd(left_side[left_idx],arr[left_idx+1])
right_gcd = gcd(right_side[-right_idx],arr[-(right_idx+1)])
left_side[(left_idx+1)] = left_gcd
right_side[-(right_idx+1)] = right_gcd
left_idx += 1
right_idx += 1
result_gcd = -1
remove_data = -1
for i in range(N):
remove_value = arr[i]
if i == 0 or i == N-1:
if i == 0:
total_gcd = right_side[1]
else:
total_gcd = left_side[-2]
if remove_value%total_gcd:
if result_gcd < total_gcd:
result_gcd = total_gcd
remove_data = remove_value
else:
left_gcd = left_side[i-1]
right_gcd = right_side[i+1]
total_gcd = gcd(left_gcd,right_gcd)
if remove_value%total_gcd:
if result_gcd < total_gcd:
result_gcd = total_gcd
remove_data = remove_value
if result_gcd == -1:
print(result_gcd)
else:
print(result_gcd,remove_data)

 

def gcd(A,B):
if not A%B:
return B
return gcd(B,A%B)
N, M = map(int,input().split())
ab = M//N
list_a = []
last_N = int(ab**(1/2))
for number_a in range(last_N,0,-1):
if not ab%number_a:
number_b = ab//number_a
if gcd(number_a,number_b) == 1:
list_a.extend([number_a,number_b])
break
print(*[ i*N for i in list_a])

 

'알고리즘 > 백준_복기_미완료' 카테고리의 다른 글

[BOJ/백준] 2666 벽장문의 이동  (0) 2021.05.03
[BOJ/백준] 2458 키순서  (0) 2021.05.03
[BOJ/백준] 2122 센서  (0) 2021.05.02
[BOJ/백준] 2156 포도주 시식  (0) 2021.05.02
[BOJ/백준] 2141 우체국  (0) 2021.05.02

+ Recent posts