https://www.acmicpc.net/problem/1978
1978번: 소수 찾기
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
www.acmicpc.net
풀이 과정
어떤 수 N이 소수임을 판정하려면 2부터 N-1까지 나누면서 나누어 떨어지는지 확인하면 된다.
=> 2부터 N/2까지만 나누어도 된다. N = a * b (2 <= a <= b <= N-1)에서 b는 N/2를 넘을 수 없다.
=> 2부터 rootN까지만 나누어도 된다. N = a * b (2 <= a <= b <= N-1) 에서 rootN 이하의 a를 발견하지 못했으면 b는 존재하지 않기 때문이다
이유: rootN 이상의 a가 존재하면 b = N / a인데 a가 rootN보다 크므로 b가 rootN보다 작게 된다. 근데 그러면 a <= b가 아니므로 존재할 수 없다.
따라서 2부터 rootN까지 나눠보면서 소수 판정을 진행하면 된다.
코드
import sys
N = int(sys.stdin.readline())
inPu = list(map(int, sys.stdin.readline().split()))
answer = 0
for i in inPu:
if i == 1: continue
primeFlag = True
for K in range(2, int(i**(1/2)) + 1):
if i % K == 0: primeFlag = False
if primeFlag: answer += 1
else: pass
print(answer)
'알고리즘 문제 풀이 > 백준' 카테고리의 다른 글
백준 6588 - 골드바흐의 추측 [파이썬] (0) | 2022.04.01 |
---|---|
백준 1929 - 소수 구하기 [파이썬] (0) | 2022.04.01 |
백준 2609 - 최대공약수와 최소공배수 [파이썬] (0) | 2022.03.26 |
백준 10430 - 나머지 [파이썬] (0) | 2022.03.26 |
백준 17299 - 오등큰수 [파이썬] (1) | 2022.03.26 |