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