숫자 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이 나오게 됩니다.