코드
min, max = map(int, input().split())
minsq = 2 # 1보다 큰 제곱수여야 하므로 시작은 2
maxsq = int(max**0.5) # 마지막 제곱해줄 수
numset = set() # 중복 제거를 위해 집합 자료형 이용
while minsq <= maxsq: # 에라토스테네스의 체
j = min//(minsq**2) # 곱해줄 시작점
while (minsq**2)*j <= max:
if (minsq**2)*j >= min: # min보다 큰 값이면 set에 넣어준다
numset.add((minsq**2)*j)
j+=1
minsq += 1
print(max-min+1-len(numset)) #출력
처음에 문제를 잘못 읽고 minsq의 범위를 잘못줘서 틀렸다. 이를테면 38, 70의 경우에도 제곱 수인 4로 나눌 수 있는 값이 있는데 49로 나눌 수 있는 것만 넣어서 틀렸다. 그래도 반례를 찾아가면서 어디서 잘못되었는지 파악할 수 있어서 좋았다. 이런 습관을 기르도록 해야겠다.
'백준' 카테고리의 다른 글
[백준] 1197번 최소 스패닝 트리 (0) | 2024.01.22 |
---|---|
[백준] 9372번 상근이의 여행 파이썬 코드 (0) | 2024.01.22 |
[백준] 1850번 최대공약수 파이썬 코드 (1) | 2024.01.21 |
[백준] 1976번 여행 가자 파이썬 코드 (0) | 2024.01.21 |
[백준] 17352번 여러분의 다리가 되어 드리겠습니다! 파이썬 코드 (0) | 2024.01.21 |