반응형
https://www.acmicpc.net/problem/1016
1016번: 제곱 ㄴㄴ 수
어떤 정수 X가 1보다 큰 제곱수로 나누어 떨어지지 않을 때, 그 수를 제곱ㄴㄴ수라고 한다. 제곱수는 정수의 제곱이다. min과 max가 주어지면, min보다 크거나 같고, max보다 작거나 같은 제곱ㄴㄴ수
www.acmicpc.net
아이디어
- 특정 구간 내 모든 소수들을 효율적으로 구하기 위해서 에라토스테네스의 체를 사용
- 입력 값이 매우 크기 때문에 1부터 최대값이 아닌 최소값부터 최대값만 계산
코드
#입력
n,m=map(int,input().split())
#에라토스테네스의 체 생성 시 1이 아닌 최소값부터 시작
a=[1]*(m-n+1)
for i in range(2,int(m**.5)+1):
k=i**2 # 제곱수
# n 이하의 k의 배수 중 최댓값에서 시작
for j in range(n//k*k, m+1, k):
# j는 최소값보다 작을 수 있으므로 체크해야 함
if j-n>=0 and a[j-n]: a[j-n]=0
#남아있는 1의 개수 = 제곱ㄴㄴ수의 갯수
print(sum(a))
반응형
'Problem Solving > BOJ-Gold' 카테고리의 다른 글
(Python) 백준 5430 - AC (1) | 2023.11.27 |
---|---|
(Python) 백준 11758 - CCW (0) | 2023.11.14 |
(Python) 백준 2206 - 벽 부수고 이동하기 (1) | 2023.11.13 |
(Python) 백준 10282 - 해킹 (1) | 2023.11.04 |
(Python) 백준 1600 - 말이 되고픈 원숭이 (0) | 2023.10.30 |