n = int(input())
data = list(map(int, input().split()))
cnt = 0
for i in data:
temp = 0
if i==1:
continue
for j in range(2,i):
if i%j==0: #소수가 아닌 경우
temp = 1
break
if temp==0:
cnt += 1
print(cnt)
소수란? : 1과 자기 자신 만을 약수로 가지는 수들
2부터 (자기자신-1)까지 for문을 돌려 나눈다. 이때 나누어지면 소수가 아니므로 for문 탈출
변수temp
: 소수(끝까지 나누어지지 않음, for문의 끝까지 갔을때)일때 cnt를 +1 하기 위한, 소수임을 나타내는 변수.
# 소수 찾기
#i가 자신인 i에 도달 후 나누어떨어진다면 그 수는 소수이므로 cnt+=1
n = int(input())
data = list(map(int, input().split()))
cnt = 0
for i in data:
if i==1:
continue
for j in range(2,i+1):
if i%j==0: #소수가 아닌 경우
if i == j: cnt+=1
break
print(cnt)
i가 자신인 i에 도달 후 나누어떨어진다면 그 수는 소수이므로 cnt+=1
내 답에서처럼 굳이 temp변수를 만들 필요가 없어짐.
#소수 찾기 - 빠른 답
input_data = int(input())
nums = list(map(int,input().split()))
count = 0
for i in nums:
if i == 1:
continue
for j in range(2,int(i**0.5) + 1):
if i % j == 0:
break
else:
count += 1
print(count)
2부터 자기 자신 전까지 하나하나 for문을 돌려 나누어 확인하게 되면 프로그램 속도가 느리다는 단점이 있다.
더 빠르게 소수를 찾기 위해서는 어떤 수의 루트(제곱근) 전까지만 나누어보면 된다.
ex) 18을 예시로 들어보자면
1 x 18
2 x 9
3 x 6
6 x 3
9 x 2
18 x 1
소수를 구할 때 어떤 숫자의 제곱근 숫자까지만 검사를 하면 소수인지 판별할 수 있다.
코드 설명 참고) https://imcoding-official.tistory.com/129
이 연산자는 x ** y처럼 사용했을 때 x의 y제곱값을 리턴한다
>>> a = 3
>>> b = 4
>>> a ** b
81
for 변수 in 반복:
수행문1
else:
수행문2
수행문2
는 for반복문이 마지막 요소까지 모두 반복했을 경우 그 다음에 수행된다. 즉, 모든 반복이 성공적으로 수행된 경우에 한 번 수행된다. 하지만 break문을 만나면 else구문은 수행되지 않고 for블럭을 완전히 빠져나간다.
참고) https://studymake.tistory.com/208
m, n = map(int, input().split())
for i in range(m, n+1): #m이상 n이하의 수 탐색
#i가 소수인지 판별
if i==1: continue
for j in range(2, int(i**0.5) + 1):
if i % j == 0 : break #소수가 아님
else:
print(i)