# 입력받은 두 수 사이의 소수를 출력하는 프로그램
# 소수란 2이상의 수 중에서 1과 자신외에 자신을 나눌 수 없는 자연수를 말한다.
# 2가 가장 작은 소수이므로, 어떤 수를 반(2)으로 나눈것보다 큰 수로는 그 수를 나눌 수 없다.
# 따라서 어떤 수 n이 있을 때, 2부터 n/2까지의 수로 나눌 수 없으면 n은 소수이다.
# 가능하면 적게 실행해야하므로 2부터 n-1까지 반복하지 않고 2부터 n/2까지 반복하는 것이 경제적이다.
def IsPriNum(num) : #소수면 True, 소수가 아니면 False 반환하는 함수
for i in range(2,round(num/2)+1) : #2부터 num/2까지의 수 중 자신을 나눌 수 있는(=나누었을 때 나머지가 0이되는) 수가 있을경우 소수가 아님.
if num > 3 and num%i == 0 : # 2(=3-1)이상의 수 중 자신을 나누는 수가 있으면 IsPriNum에서 False반환
return False
else :
continue
return True # 2부터 num/2까지의 수 중 자신을 나눌 수 있는 수가 없으면 IsPriNum에서 True반환
priNum = [] # 소수를 저장할 리스트
print("입력하신 두 자연수를 포함한 사이의 자연수 중 소수를 출력합니다.")
firstNumStr = input("첫 번째 자연수를 입력해주세요 : ")
lastNumStr = input("두 번째 자연수를 입력해주세요 : ")
# 입력된 값 중 0이 있거나 숫자가 아닌 값이 있을경우 재입력
while firstNumStr=='0' or lastNumStr=='0' or not(firstNumStr.isnumeric()) or not(lastNumStr.isnumeric()):
print("잘못 입력 하셨습니다. 1이상의 자연수를 숫자로 입력 해 주세요.")
firstNumStr = input("첫 번째 자연수를 입력해주세요 : ")
lastNumStr = input("두 번째 자연수를 입력해주세요 : ")
# 문자열을 정수로 변환
firstNum = int(firstNumStr)
lastNum = int(lastNumStr)
#두 수 중 작은수를 firstNum에, 큰 수를 lastNum에 저장
if firstNum > lastNum :
temp = firstNum
firstNum = lastNum
lastNum = temp
# 소수를 소수리스트에 추가하고 해당소수 출력
for i in range(firstNum, lastNum+1) :
if i == 1 : # 1일경우 Pass
continue
elif IsPriNum(i) == True : #소수로 확인되면 아래 문장 실행
priNum.append(i) #소수를 소수리스트에 추가
print("{}는 소수입니다.".format(i)) #추가된 소수 출력
print("{}부터 {}까지의 자연수 중 소수는 {}개이며, {}입니다.".format(firstNum,lastNum,len(priNum),priNum))
소수 구하는 문제 제맘대로 풀었습니다.
g9191hc
작성일
22.02.02 12:31
조회수
489
댓글 0