1) 사이트
2) 문제
말그대로 소인수분해 과정을 보여주면 되는 문제 입니다.
예제보니까 한 번에 이해 완료!
그동안 풀었던 1978번 소수찾기 문제와 2581번 소수 문제에서 활용했던 지식들을 총 동원해서 풀면 될 것 같습니다.
3) 파이썬 코드
nanum=2 #number을 nanum으로 나눌 것임 2~number-1까지
number=int(input())
number_copy=number
while(number!=1):
#소수가 들어온 경우는 nanum이 number-1이 될 때까지 돌려서 나누어 떨어지는 것이 없으면 걍 출력한다.
# number-1이 될 때까지 나눠지지 않으면 nanum에 +1이 되기 때문에 number==nanum이 된다.
if (nanum==number_copy and number_copy==number):
print(number_copy)
break
elif(number%nanum==0):
print(nanum)
number=number//nanum
#나눠지지 않으면 nanum을 1 더해준다.
else:
nanum=nanum+1
3-1) 선수 지식
이 문제에는 파이썬 선수 지식이 없습니다 : )
3-2) 설명
1. 사용할 변수를 선언 및 초기화 해줍니다.
nanum=2 #number을 nanum으로 나눌 것임 2~number-1까지
소인수분해 할 때 2로 나눠보고 안나눠지면 3으로 나눠보고 안나눠지면 5로 나눠보고 하잖아요.
안 나눠질 때마다 nanum 변수를 1씩 증가시켜 줄겁니다.
2. 소인수분해할 숫자를 입력 받습니다.
number=int(input())
number_copy=number
number는 나뉘어 지는 수를 만날 때마다 변형되기 때문에 카피를 해줄겁니다.
3. 모든 소인수를 찾을 때까지 반복문을 돌려줍니다.
while(number!=1):
왜 0이아니라 1일까요?
22는 2에서 한 번 멈추고 22//2 = 11로 변할 겁니다. 그리고 11을 만나 11//11 = 1로 최종 변신을 하죠.
그래서 0이아니라 1입니다. 몫은 0이 나올 수 없어요!
4. 만약 들어온 수가 소수라면 그대로 출력해줍니다.
if (nanum==number_copy and number_copy==number):
print(number_copy)
break
소수는 소인수 분해해보면 1과 자기자신밖에 없는 수이죠. 때문에 계속 nanum변수를 1씩 늘리면서 최종적으로 number와 똑같은 수가 되었을 경우에도 나눠지는 숫자가 없었다면 그대로 출력하게 됩니다.
5. 나눠지는 합성수라면 nanum을 출력해주고 number을 nanum으로 나눠 변형시켜줍니다.
elif(number%nanum==0):
print(nanum)
number=number//nanum
6. nanum으로 나눠지지 않는다면 +1을 해 또 나눠줍니다.
#나눠지지 않으면 nanum을 1 더해준다.
else:
nanum=nanum+1
4) c언어
없음
궁금한 점이나 공유할 정보가 있다면 댓글로 남겨주세요 *^^*
끝!
'알고리즘 > 백준' 카테고리의 다른 글
4948번 베르트랑 공준 (0) | 2021.07.17 |
---|---|
1929번 소수 구하기 (0) | 2021.07.16 |
2581번 소수 (0) | 2021.07.16 |
1978번 소수 찾기 (0) | 2021.07.15 |
1011번 Fly me to the Alpha Centauri (0) | 2021.07.14 |