[파이썬] 소수 판별 / 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