1) 사이트
2) 문제
이 문제는 1978번 <소수 찾기> 문제를 풀고오면 너무나 쉬운 문제입니다.
다시 한 번 간단하게 설명하면, min ~ max 값을 입력받아 이 사이의 소수만 뽑아내 총 합과 소수 중 가장 작은 수를 출력하면 됩니다.
특히 소수는 약수가 1과 자기자신밖에 없는 수를 소수라고 하고, 그 외에 수를 합성수라고 합니다.
또한 핵심은 2~나자신-1까지의 숫자로 나누었을 때 그 어떤 수로도 나누어 떨어지지 않으면, 그 수는 소수 입니다.
3) 파이썬 코드
result_min=10001 # 소수 중 최소값
prime_sum=0 # 소수들의 합
flag=0 # 소수면 0 합성수면 1
min=int(input())
max=int(input())
for i in range(min,max+1):
for j in range(2,i):
#2~자신의값-1으로 나눴을 때 나눠지면 합성수임
if(i%j==0):
flag=1
break
if flag==1 or i==1:
flag=0
else:
prime_sum=prime_sum+i
if result_min>i:
result_min=i
if prime_sum==0:
print("-1")
else:
print(prime_sum)
print(result_min)
3-1) 선수 지식
이 문제에는 파이썬 선수 지식이 없습니다 : )
3-2) 설명
1. 사용할 변수를 선언 및 초기화 해줍니다.
result_min=10001 # 소수 중 최소값
prime_sum=0 # 소수들의 합
flag=0 # 소수면 0 합성수면 1
result_min는 사이 소수 값 중 가장 작은 소수값을 저장합니다.
prime_sum는 사이 소수 값들의 총 합을 저장합니다.
flag는 소수인지 아닌지를 구분하는 0과 1을 저장합니다.
2. 어디에서 어디까지 수를 검사할 것인지 최소값과 최대값을 입력받습니다.
min=int(input())
max=int(input())
3. min~max 사이의 소수를 검토하기 위해 하나 씩 뽑아줄 겁니다.
for i in range(min,max+1):
참고로 for문은 min,max로 넣으면 max-1만큼만 돌아가므로 반드시 max+1을 검사해주셔야 합니다.
4. 뽑은 하나의 수를 대상으로 2~자기자신-1로 나눠 소수인지 합성수인지 판단합니다.
for j in range(2,i):
#2~자신의값-1으로 나눴을 때 나눠지면 합성수임
if(i%j==0):
flag=1
break
flag가 0이면 소수 1이면 합성수 입니다. 또한 딱 나눠 떨어지면 합성수 이므로 더이상 반복문을 진행할 필요가 없기 때문에 break을 사용합니다.
5. 소수인지 판별하는 반복문이 모두 돌아간 뒤 flag가 1이거나 검사하는 대상의 수가 1일 경우 flag를 0으로 초기화해준 뒤 다음 숫자를 검사합니다.
if flag==1 or i==1:
flag=0
1은 소수도 합성수도 아니기 때문이죠 ^^
6. 만약 소수일 경우 min값을 찾고, 합산을 해줍니다.
else:
prime_sum=prime_sum+i
if result_min>i:
result_min=i
7. 사이값 중 소수가 하나도 없는 경우는 -1을 출력해줍니다. (총 합산이 0이면 소수가 하나도 없었던 것이겠죠?)
if prime_sum==0:
print("-1")
8. 7이 아니라면 결과값을 출력해줍니다.
else:
print(prime_sum)
print(result_min)
4) c언어
없음
궁금한 점이나 공유할 정보가 있다면 댓글로 남겨주세요 *^^*
끝!
'알고리즘 > 백준' 카테고리의 다른 글
1929번 소수 구하기 (0) | 2021.07.16 |
---|---|
11653번 소인수분해 (0) | 2021.07.16 |
1978번 소수 찾기 (0) | 2021.07.15 |
1011번 Fly me to the Alpha Centauri (0) | 2021.07.14 |
10757번 큰 수 A+B (0) | 2021.06.06 |