문제를 보고 먼저 풀어본 뒤 답을 맞추는 방향으로 학습해볼 예정이었으나...역시 호락호락하지 않았다...
Q>
A>
import random
rNum = random.randint(100, 1000)
print(f'rNum: {rNum}')
for num in range(1, rNum+1):
soinsuFlag = 0
if rNum % num == 0:
print(f' [약수] : {num}')
soinsuFlag += 1
if num != 1:
flag = True
for n in range(2, num):
if num % n == 0:
flag = False
break
if (flag):
print(f'[소수] : {num}')
soinsuFlag += 1
if soinsuFlag >= 2:
print(f'[소인수] : {num}')
A> 해설
🏷️(1) 난수 발생
import random
rNum = random.randint(100, 1000)
print(f'rNum: {rNum}')
🏷️(2) for문 이용
for num in range(1, rNum+1): 🏷️ 난수 까지 반복
soinsuFlag = 0 🏷️(5)-1 변수 선언
🏷️(3) 약수 : 나눴을 때 나머지가 0으로 떨어지는지 여부 확인
if rNum % num == 0: 🏷️ 나누어 떨어진다 = 약수
print(f' [약수] : {num}')
soinsuFlag += 1 🏷️(5)-1-1 소인수가 약수의 조건을 만족한다면 2이상의 숫자가 나옴
🏷️(4) 소수 : 1외에 본인만 약수인 수
if num != 1: 🏷️1을 포함하지 않기 위해 먼저 정의 함
flag = True 🏷️전제 조건 설정 - 약수가 없다. = 즉, 소수(True)이다 = True
for n in range(2, num): 🏷️ 약수가 있다 - 즉, num은 소수가 아니다.
if num % n == 0: 🏷️ = 약수가 있다.
flag = False
break
if (flag): 🏷️ = flag = True 이다. = 약수가 없었다.
print(f'[소수] : {num}')
soinsuFlag += 1 🏷️(5)-1-2 소인수가 소수의 조건을 만족한다면 2이상의 숫자가 나옴
🏷️(5) 소인수 (약수이면서 소수인 수)
if soinsuFlag >= 2: 🏷️ (5)-1-1 + (5)-1-2에 따라 2 이상이면 소인수로 판단하겠다.
print(f'[소인수] : {num}')