간단하게 에라토스테네스의 체를 사용하면 풀 수 있는 문제이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def isPrime(num):
    if num == 1:
        return False
    else:
        for i in range(2int(num**0.5+ 1):
            if num % i == 0:
                return False
        return True
 
 
= int(input())
num = list(map(int, input().split()))
cnt = 0
for i in range(n):
    if isPrime(num[i]) is True:
        cnt += 1
print(cnt)
 
cs

처음에 line 13에 있는 cnt =0 이라는 코드를 넣지 않고 돌렸었는데, 이렇게 되면 런타임 에러(NameError)가 뜬다.

이렇게 되는 이유는 아마 채점프로그램의 문제인 것 같기도 한데, 또 특이한 점은 atom의 hydrogen을 통해서 프로그램을 실행시켰을 때도 계속 cnt가 초기화가 되지 않고 쌓이는 현상이 나타난다는 것이다.

 

정확하지는 않지만, 초기화가 이루어지지 않을 경우, cnt가 할당된 메모리가 해제가 되지 않고 계속 쌓이기 때문인 듯 싶다.

 

아무튼, cnt = 0으로 제대로 변수를 초기화시켜주면 코드는 제대로 작동한다.


참고로 에라토스테네스의 체는 이전에 풀었던 문제은 다음 링크를 참조하자.

https://gettingtoknowit.tistory.com/89

 

[백준] 1929_소수 구하기 파이썬 (시간초과 VS 에라토스테네스의 체)

시간초과와의 싸움이었다. 간단히 구하는 것은 가능하지만 계속 오버타임이 발생했다. 처음에 썼던 코드 2개를 올려보면 다음과 같다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 def count_prime_number(n, m):    ..

gettingtoknowit.tistory.com

 


 

문제 출처: https://www.acmicpc.net/problem/1978

 

1978번: 소수 찾기

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

www.acmicpc.net

 

+ Recent posts