백준 / GCD합 / 9613

박성완·2022년 2월 19일
0

백준

목록 보기
17/78
post-thumbnail

Question

문제링크
Silver 3

양의 정수 n개가 주어졌을 때, 가능한 모든 쌍의 GCD의 합을 구하는 프로그램을 작성하시오.

Input

첫째 줄에 테스트 케이스의 개수 t (1 ≤ t ≤ 100)이 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있다. 각 테스트 케이스는 수의 개수 n (1 < n ≤ 100)가 주어지고, 다음에는 n개의 수가 주어진다. 입력으로 주어지는 수는 1,000,000을 넘지 않는다.

3
4 10 20 30 40
3 7 5 12
3 125 15 25

Output

각 테스트 케이스마다 가능한 모든 쌍의 GCD의 합을 출력한다.

70
3
35

Logic

기본 구조 : for문, combinations
1. itertools의 조합을 이용, 각 조합별 합을 구한다.
2. eval 함수를 이용해 각 gcd를 구하여 더한다

Code

import sys,math
from itertools import combinations
result=0
for i in range(int(sys.stdin.readline())):
    data=sys.stdin.readline().split()[1:]
    numbers=list(combinations(data,2))
    for ss in numbers:
        result+=eval('math.gcd('+",".join([str(i) for i in ss])+')')
    print(result)
    result=0

0개의 댓글