문제 분석
첫 번째 단계(문제 요약 및 조건 파악)
양의 정수 n개가 주어졌을 때, 가능한 모든 쌍의 GCD의 합 구하기.
GCD: 최대공약수(Greatest Common Divisor, GCD)
첫째 줄에 테.케의 개수(1≤t≤100)
각 테.케는 한 줄로 이뤄짐.
첫번째 수는 수의 개수 n(1≤n≤100), 이후 n개의 수가 주어짐.
입력으로 주어지는 수는 백만을 넘지 않음.
각 테.케마다 가능한 모든 쌍의 최대공약수의 합 출력
두 번째 단계 (문제 핵심 파악)
최대공약수는 두 자연수의 공통된 약수 중 가장 큰 수
→ 두수의 최대공약수를 구하는 유클리드 호제법 이용.
<유클리드 호제법>
임의의 두 자연수 a, b가 주어지고 둘 중 큰 값이 a라고 가정하자.
a를 b로 나눈 나머지를 n로 한다면(a%b = n)
n이 0일때, b가 최대공약수임
만약, n이 0이 아니라면 a에 b값을 다시넣고 b에 n를 대입하고 위 과정에서 나누기부터 반복한다.
코드 작성
importsysinput=sys.stdin.readlinen=int(input())
defgcd(a, b):
ifa%b==0:
returnbelse:
returngcd(b, a%b)
for_inrange(n):
tc=list(map(int, input().split()))
ans=0foriinrange(1, tc[0]): # 수의 개수forjinrange(i+1, tc[0] +1): # 두 수를 짝지어 준다.ans+=gcd(tc[i], tc[j])
print(ans)
느낀점
유클리드호제법으로 최대공약수를 구한다.
문제 분석
첫 번째 단계(문제 요약 및 조건 파악)
양의 정수 n개가 주어졌을 때, 가능한 모든 쌍의 GCD의 합 구하기.
GCD: 최대공약수(Greatest Common Divisor, GCD)
첫째 줄에 테.케의 개수(1≤t≤100)
각 테.케는 한 줄로 이뤄짐.
첫번째 수는 수의 개수 n(1≤n≤100), 이후 n개의 수가 주어짐.
입력으로 주어지는 수는 백만을 넘지 않음.
각 테.케마다 가능한 모든 쌍의 최대공약수의 합 출력
두 번째 단계 (문제 핵심 파악)
최대공약수는 두 자연수의 공통된 약수 중 가장 큰 수
→ 두수의 최대공약수를 구하는 유클리드 호제법 이용.
<유클리드 호제법>
임의의 두 자연수 a, b가 주어지고 둘 중 큰 값이 a라고 가정하자.
a를 b로 나눈 나머지를 n로 한다면(a%b = n)
n이 0일때, b가 최대공약수임
만약, n이 0이 아니라면 a에 b값을 다시넣고 b에 n를 대입하고 위 과정에서 나누기부터 반복한다.
코드 작성
느낀점
유클리드호제법으로 최대공약수를 구한다.