파이썬
[파이썬] 소수 판별 / for문 이용해 두개의 정수 입력받고 그 사이 소수만 출력하기
전나경
2023. 1. 24. 11:30
소수란
약수로 1과 자기 자신을 가진 1보다 큰 양의 정수입니다.
우선,소수를 판별하는 코드를 구현해보겠습니다.
number = int(input("2 이상의 양의 정수를 입력해주세요.:"))
for i in range(2, number+1):
if number % i == 0:
print(f"{number}, 소수입니다.")
break
else:
print(f"{number}, 소수가 아닙니다.")
2 이상의 양의 정수를 입력해주세요.:5
5, 소수가 아닙니다.
5, 소수가 아닙니다.
5, 소수가 아닙니다.
5, 소수입니다.
5를 입력했을 때
출력되길 원한 건 바로 5, 소수입니다.
하고 판별값이 바로 나와주는 것이었는데, i에 2부터 4까지 돌리고 5 됐을 때 소수입니다. 하고 나오네요.
뭘 잘못했지.. 하고 보니까
for i in range(2, number+1):
의도가 number 자기자신까지 범위에 포함하려고 한 거였는데
의도 자체가 틀려먹었던 겁니다..
i의 범위가 number-1까지 여야
본인 외의 나누어떨어지는 수가 있는지 없는지 판별 가능합니다.
for i in range(2, number):
일단 이렇게 고쳐줍니다.
그러면 저 범위내에서
if number % i == 0:
이 조건이 성립하면 number 외에 다른 수를 약수로 가지는 게 되니까
소수가 아닌 수가 되겠군요.
for i in range(2, number):
if number % i == 0:
print(f"{number}, 소수가 아닙니다.")
이렇게 고쳐줍니다.
보니까 else의 들여쓰기도 잘못됐습니다.
반복문을 돌렸을 때 소수가 아니면 '소수가 아닙니다.'를 출력하게 하고,
소수이면 반복문을 나와서 '소수입니다.'를 출력해주려면
최종:)
number = int(input("2 이상의 양의 정수를 입력해주세요.:"))
for i in range(2, number):
if number % i == 0:
print(f"{number}, 소수가 아닙니다.")
break
else:
print(f"{number}, 소수입니다.")
이렇게 들여쓰기 해줘야됩니다.
5를 입력해서 출력해보면
2 이상의 양의 정수를 입력해주세요.:5
5, 소수입니다.
의도한대로 출력됩니다.
소수를 판별하는 코드를 작성해보았으니,
양의 정수 두개를 입력받아 그 사이에 있는 소수를 출력해보는 코드를 작성해봅시다.
num1 = int(input("첫 번째 양의 정수를 입력해주세요.: "))
num2 = int(input("두 번째 양의 정수를 입력해주세요.: "))
for prime_num in range(num1, num2+1):
is_prime_num = True
for i in range(2, prime_num):
if prime_num % i == 0:
is_prime_num = False
break
else:
print(prime_num, end=' ')
첫 번째 양의 정수를 입력해주세요.: 3
두 번째 양의 정수를 입력해주세요.: 55
3 5 7 11 13 17 19 23 29 31 37 41 43 47 53
첫 번째 수가 두 번째 수보다 크게 입력되면 출력이 안된다.
r prime_num in range(num1, num2+1, -1):
is_prime_num = True
첫 번째 양의 정수를 입력해주세요.: 50
두 번째 양의 정수를 입력해주세요.: 30
47 43 41 37
뭐 이렇게 하면 출력이야 되겠지만,
그럼 또 두번째 수가 첫번째 수보다 큰 게 표현이 안된다.
게다가 역으로 출력하는 것을 원하는 상황은 아니니까..
if num1 > num2:
num1, num2 = num2, num1
이 조건을 붙이면 된다.
최종:)
num1 = int(input("첫 번째 양의 정수를 입력해주세요.: "))
num2 = int(input("두 번째 양의 정수를 입력해주세요.: "))
if num1 > num2:
num1, num2 = num2, num1
for prime_num in range(num1, num2+1):
is_prime_num = True
for i in range(2, prime_num):
if prime_num % i == 0:
is_prime_num = False
break
else:
print(prime_num, end=' ')
첫 번째 양의 정수를 입력해주세요.: 10
두 번째 양의 정수를 입력해주세요.: 50
11 13 17 19 23 29 31 37 41 43 47
첫 번째 양의 정수를 입력해주세요.: 50
두 번째 양의 정수를 입력해주세요.: 10
11 13 17 19 23 29 31 37 41 43 47