문제 : https://www.acmicpc.net/problem/1978
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램
import sys
input = sys.stdin.readline
def prime(N):
for i in range(2, int(N ** 1/2)+1):
if((N % i) == 0):
return False
return True
T = int(input()) # 테스트 케이스의 개수
case = map(int, input().split()) # 소수인지 판별할 값
num = 0
for i in case:
if(i <= 1): # 1 이하는 소수 x
continue
if(prime(i)): # 소수면
num += 1
print(num)
[문제풀이]
소수란 1과 자기 자신 외에는 나누어 떨어지지 않는 수를 의미한다.
반복문을 돌려 자기 자신 외에 나누어 떨어진다?
그럼 소수가 아니다!
int(N ** 1/2)+1
왜 N까지가 아니라 이렇게 했냐면 중간값을 넘으면 어차피 나누어 떨어지지 않는다.
그러니 확인할 필요도 없음!
예) 16 = 1 2 4 8 16
9 이상은 확인할 필요 x
'코딩테스트 > 백준' 카테고리의 다른 글
| [백준] 1956번 : 운동 (Python) (0) | 2024.12.26 |
|---|---|
| [백준] 2839번 : 설탕 배달 (Python) (0) | 2024.12.26 |
| [백준] 2609번 : 최대공약수와 최소공배수 (Python) (0) | 2024.12.26 |
| [백준] 1212번 : 8진수 2진수 (Python) (0) | 2024.06.13 |
| [백준] 1373번 : 2진수 8진수 (Python) (1) | 2024.06.13 |