import Foundation
let input = readLine()!.split(separator: " ").map{ Int(String($0))! }
let (A, B) = (input[0], input[1])
var numbers = Array(repeating: true, count: Int(Double(B).squareRoot())+1)
(numbers[0], numbers[1]) = (false, false)
var prime = [Int]()
var answer = 0
// 소수 구하기
for i in stride(from: 2, to: numbers.count, by: 1) {
let now = numbers[i]
if now == false {
continue
}
prime.append(i)
for j in stride(from: i + i, to: numbers.count, by: i) {
numbers[j] = false
}
}
// 구한 소수로 거의 소수 구하기
for num in prime {
var now = num
while Double(num) <= Double(B) / Double(now) {
if Double(A) / Double(now) <= Double(num) {
answer += 1
}
now *= num
}
}
print(answer)
→ 아이디어 자체는 간단하지만 오버플로우를 신경써야 하는 점이 조금 까다로웠다.