본문 바로가기

알고리즘

[Python] BOJ 백준 21920 서로소평균

문제


효성이는 길이가 N인 수열 A에서 X와 서로소인 수들을 골라 평균을 구해보려고 한다.

효성이를 도와 이를 계산해주자.

첫째 줄에 수열 A에서 X와 서로소인 수들의 평균을 출력한다.

절대/상대 오차는 10**6까지 허용한다.


 풀이


서로소는 두 수의 최대공약수가 1인 경우를 말한다. 최대공약수를 구하는 함수를 이용해서 쉽게 풀 수 있었다. 

최대공약수 혹은 최소공배수를 이용하는 문제들은 자주 등장하기 때문에 외워두는 편이 정신건강에 이로운 것 같다. 

import sys

si = sys.stdin.readline
n = int(si())
arr = list(map(int, si().split()))
x = int(si())
answer, cnt = 0, 0


def gcd(a, b):
    while b:
        a, b = b, a % b
    return a


for i in arr:
    if gcd(x, i) == 1:
        answer += i
        cnt += 1

print(answer / cnt)