📍 In a nutshell...
True
, False
둘 중 하나를 반환값으로 지정문제)
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다.
다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
풀이)
우선, 소수란 1과 자기 자신 외에 나눠지지 않는 수를 말한다.
기본적으로 위의 문제를 풀어보면 아래와 같다.
N = int(input())
X = list(map(int, input().split()))
result = []
for x in list(X):
if x == 1:
pass
else:
for i in range(2,x):
if x%i == 0:
break
else:
result.append(x)
print(len(result))
자기 자신-1
까지 나눠지지 않으면, 즉 소수라면 result
에 더한다 result
의 개수를 구한다 N = int(input())
X = list(map(int, input().split()))
#소수를 판단하는 함수 is_prime
def is_prime(n):
if n == 1:
return False
for i in range(2,int(n**(1/2))+1):
if n%i == 0:
return False
return True
cnt = 0
for x in X:
if is_prime(x): cnt += 1
print(cnt)
is_prime
의 로직은 아래와 같다False
다 False
(소수가 아님)int(n**(1/2))
까지 나눠지지 않는다면 True
is_prime(x)
이 True
라면 카운트한다 나누기 범위를 자기자신-1
이 아니라 int(n**(1/2))
로 하는 이유는 아래와 같다.
n**(1/2)
은 루트와 동일하다 (1/2 제곱근) 출처: 백준