백준

[python] 백준 1978 : 소수 찾기

썽연 2021. 7. 28. 16:00
728x90

백준 1978번입니다.

문제는 다음과 같습니다.

 

첫 줄에 숫자 N을 입력받아

N개의 숫자를 입력 후, 숫자가 소수인지 아닌지 판별하여

소수의 갯수를 출력하는 프로그램을 작성하면 됩니다.

 

먼저 소수에 대해서 알아야합니다.

소수란?

약수가 자기 자신과 1뿐인 수 입니다.

 

그럼 1과 자기 자신말고 어떠한 수로도 나뉘어떨어지면 안됩니다.

 

먼저 N을 입력 받아야하기 때문에,

N = int(input())

을 작성해 주었습니다.

N개의 갯수만큼, 숫자를 입력 받아야합니다.

저는 리스트로 숫자를 입력 받았습니다.

a = list(map(int, input().split()))

이렇게 작성하면, 리스트 a안에 순서대로 숫자가 들어가겠죠?

하지만 N과 리스트 길이가 같아야하므로 

조건으로 길이가 N과 같다는 조건식을 추가할것입니다.

 

리스트 a안의 숫자들을 돌면서, 소수의 갯수를 찾을 것이다.

예를 들어 3을 소수인지 판별 한다면,

3은 3 % 1 == 0 , 3 % 2 != 0 , 3 % 3 == 0

으로 1과 3으로 나뉘어지기 때문에 소수

4를 판별하면

4 % 1 == 0, 4 % 2 == 0, 4 % 3 != 0, 4 % 4 ==0

1, 2, 4로 나누어떨어지므로 소수가 아니다.

 

소수가 되기 위해서는 1과 자신의 수로만 나누어떨어지어야하므로 약수의 갯수는 두개다.

두개일 때, 소수이므로 

최종 코드는 다음과 같다.

 

 

N = int(input())
a = list(map(int, input().split()))
cnt = 0 #소수개수

if len(a) == N: 
  for i in a:
    b = 0 #나뉘는 수 갯수
    for j in range(1, i+1): #i를 j로 나눌건데, 1부터 i까지의 수로 다 나누어본다.
      if i % j == 0: #나누어떨어지면
        b +=1 #나뉘는 수 갯수를 1증가
    if b ==2 : #나뉘는 수가 2개일시 소수이므로
      cnt+=1 #소수개수를 1증가
print(cnt)

 

728x90