Notice
Recent Posts
Recent Comments
Link
250x250
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

바닥부터 시작하는 개발 공부

[알고리즘]백준 9613: GCD합 본문

Algorithm/백준

[알고리즘]백준 9613: GCD합

Im_light.J 2023. 2. 24. 04:07
728x90

문제

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

입력

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

출력

 

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

 

풀이


math 라이브러리의 gcd를 활용했습니다 

https://kjim.tistory.com/83

 

[알고리즘]백준 5618번: 공약수

알고리즘 유형: 수학, 브루트 포스 문제 자연수 n개가 주어진다. 이 자연수의 공약수를 모두 구하는 프로그램을 작성하시오. 입력 첫째 줄에 n이 주어진다. n은 2 또는 3이다. 둘째 줄에는 공약수

kjim.tistory.com

위의 포스팅에서는 공약수를 구하는 알고리즘을 직접 구현했는데 한번 확인해보면 좋을거 같습니다 

itertools의 combintion은 조합을 구해주는 함수입니다. 

이중 for문을 통해 쉽게 구현 가능하지만, 짧은 코딩을 위해 사용했습니다  

from math import gcd 
from itertools import combinations
import sys
t = int(sys.stdin.readline().strip())
for i in range(t):
    nums =list(map(int, sys.stdin.readline().strip().split()))
    nums=nums[1:]
    
    com = combinations(nums,2)
    answer=[]
    for i in com: 
        answer.append(gcd(i[0],i[1]))
    print(sum(answer))
728x90
Comments