Python 세트를 이용한 공약수의 합 구하기

Psj·2020년 9월 24일
0

Python

목록 보기
6/41

숫자 2개를 입력하면 각각 그에 해당되는 공약수중에서
공통되는 공약수들을 더한 값을 나오게하는 방법입니다.

a, b = map(int, input().split())
x = { i+1 for i in range(a) if a%(i+1)==0} 
y = { i+1 for i in range(b) if b%(i+1)==0}
z= {i for i in x&y}
print(sum(z))

10 20을 입력했을때
10과 20의 공약수 1, 2, 5, 10을 더한 18이 나온상황




1) a, b = map(int, input().split())

map은(타입, input().split())으로 사용할수있으며
타입은 input되는 값의 유형을 나타냅니다.

split()은 input값이 하나가 아닌 여러개를 입력할수있게 도와주는 함수입니다.
여기서는 변수 a와 b에 각각 input값이 들어갈수 있게 설정해놨습니다.


2)
x = { i+1 for i in range(a) if a%(i+1)==0}
y = { i+1 for i in range(b) if b%(i+1)==0}

x={ for 변수 in 범위 조건 } 식은 이렇습니다.

계산순서
범위 내의 변수 하나하나를 조건이 검토하고 으로 나오게됩니다.
범위내 변수>if조건>식

위 1) a, b 인풋값에 10 20을 넣는다고 했을때
x= { i+1 for i in range(10) if 10%(i+1)==0}
y= { i+1 for i in range(20) if 20%(i+1)==0}

x를 먼저 계산해보면
범위 range(10)은 {0,1,2,3,4,5,6,7,8,9}이고 이게 하나씩 변수 i 에 들어갑니다.
그리고 이 값들을 조건식이 검토합니다.
......................................
조건
10%(i+1)==0
......................................
if 10%(0+1)==0 True
if 10%(1+1)==0 True
if 10%(2+1)==0
if 10%(3+1)==0
if 10%(4+1)==0 True
if 10%(5+1)==0
if 10%(6+1)==0
if 10%(7+1)==0
if 10%(8+1)==0
if 10%(9+1)==0 True

i에 0, 1, 4, 9가 들어갔을때 나머지가 0이 되어 조건이 True가 됩니다.

이 값들이 식에 들어가서 계산되어 나오게됩니다.
..................

i+1
..................
0+1= 1
1+1= 2
4+1= 5
9+1= 10



그래서
x={1, 2, 5, 10}

y도 같은방식으로 하면

y={1, 2, 4, 5, 10, 20}



3)
z= {i for i in x&y}
x와 y 세트에서 공통요소 추출합니다.

x&y로 공통요소에 포함되는 변수 i가 바로 식 i 로 나와서
z={1,2,5,10} 이 됩니다.


4)
print(sum(z))
마지막으로 sum(z) 내부요소값을 더해줘 print하면
최종적으로 18이 나오게 됩니다.

profile
Software Developer

0개의 댓글