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