[λ°±μ€] 1124 μΈλνλΌμ with Python
π BOJ 1124 μΈλνλΌμ
π‘ 쑰건
μμ°μ Xλ₯Ό μμΈμλΆν΄νλ©΄, κ³±ν΄μ Xκ° λλ μμμ λͺ©λ‘μ μ»μ μ μλ€.
μλ₯Ό λ€μ΄, 12 = 2 Γ 2 Γ 3μ΄λ€. 1μ μμκ° μλλ€.μ΄λ€ μ Xλ₯Ό μμΈμλΆν΄ ν΄μ ꡬν μμμ λͺ©λ‘μ κΈΈμ΄κ° μμμ΄λ©΄, κ·Έ μλ₯Ό μΈλνλΌμ μ΄λΌκ³ νλ€.
12λ λͺ©λ‘μ ν¬ν¨λ μμμ κ°μκ° 3κ°μ΄κ³ , 3μ μμμ΄λ 12λ μΈλνλΌμμ΄λ€.
λ μ μ Aμ Bκ° μ£Όμ΄μ‘μ λ, Aλ³΄λ€ ν¬κ±°λ κ°κ³ , Bλ³΄λ€ μκ±°λ κ°μ μ μ μ€μμ μΈλνλΌμμΈ κ²μ κ°μλ₯Ό ꡬνλ λ¬Έμ
2 β€ A β€ B β€ 100,000
μλΌν μ€ν λ€μ€μ 체, μν, μμνμ μ νμ λ¬Έμ
π μμ λ° μ€νκ²°κ³Ό
μμ 1
2 10
μ€νκ²°κ³Ό 1
5
μμ 2
100 105
μ€νκ²°κ³Ό 2
2
μμ 3
17 17
μ€νκ²°κ³Ό 3
0
μμ 4
123 456
μ€νκ²°κ³Ό 4
217
β¨οΈ λ¬Έμ νμ΄
μλΌν μ€ν λ€μ€μ 체λ₯Ό μ΄μ©ν΄ μμλ₯Ό νλ¨ν μ μλ is_prime 리μ€νΈμ νμ λ μμλ₯Ό λ΄μ primes 리μ€νΈλ₯Ό λ§λ λ€.
0κ³Ό 1μ μμκ° μλκΈ°μ, is_prime 리μ€νΈμμ λ°λμ 0 κ°μ λ£μ΄μ€μΌ νλ€.
A λΆν° B κΉμ§μ λ²μλ₯Ό μννλ©΄μ, λ§λ€μ΄ λμ primes λ°°μ΄λ μννλ€.
A λΆν° B κΉμ§μ λ²μμ μ«μλ₯Ό primes λ°°μ΄μ μ«μλ‘ λλλ©΄μ 1μ μ μΈν μμμ κ°μλ₯Ό μΌλ€.(3)μμ λμ¨ μ«μκ° is_primeμμ μμλ‘ νλ³μ΄ λλ€λ©΄ res += 1
A λΆν° B κΉμ§ μνκ° λλ¬λ€λ©΄, res λ₯Ό λ°νν ν μΆλ ₯νλ€.
π₯ μμ€ μ½λ
from sys import stdin
a, b = map(int, stdin.readline().split())
is_prime = [1 for i in range(100001)]
primes = []
is_prime[0:1] = 0, 0
def prime_checker():
for i in range(2, 100000):
if is_prime[i] == 1:
primes.append(i)
temp, length = i + i, len(is_prime)
while length > temp:
is_prime[temp] = 0
temp += i
def check_under_prime(a, b):
prime_checker()
res = 0
for i in range(a, b + 1):
cnt, idx = 0, 0
while 1:
if i % primes[idx] == 0:
cnt += 1
i //= primes[idx]
if i == 1:
break
else:
idx += 1
if is_prime[cnt] == 1:
res += 1
return res
print(check_under_prime(a, b))