Número con menor factor primo
Submit solution
Points:
100 (partial)
Time limit:
1.0s
Memory limit:
32M
Author:
Problem type
Allowed languages
Ada, BrainF***, C, C#, C++, Dart, Go, Java, JS, Kotlin, Lua, Pascal, Prolog, Python, Swift, VB
Encontrar el N-ésimo entero positivo más pequeño cuyo menor factor primo es , o declare que el resultado es mayor que .
Entrada
La primera y única línea de la entrada contiene los enteros y separados por espacio . siempre será primo.
Salida
Imprimir una simple línea con el resultado esperado, o cero si el resultado excede a .
Ejemplo #1 de Entrada
1 2
Ejemplo #1 de Salida
2
Ejemplo #2 de Entrada
2 3
Ejemplo #2 de Salida
9
Ejemplo #3 de Entrada
1000 1000003
Ejemplo #3 de Salida
0
.
Comments
.
*
lo q hice fue iterar por los múltiplos de p mayores o iguales q p^2,con un arreglo de primos revisaba hasta la raíz verificando q p fuera el menor primo q lo divide
a mi lo único q se me ocurrió fue una fb optimization pero me dio AC
Podrías explicarla?
A ver, originalmente el problema tenía como tiempo límite 10 segundos, supongo que fue un error, la solución esperada entra en un segundo. La idea es hacer dos soluciones, una cuando es pequeño, y otra cuando es grande. La solución cuando es pequeño: podemos hacer búsqueda binaria a la respuesta: si es la cantidad de números menores o iguales que cuyos factores primos son mayores o iguales que , es obvio que es no decreciente, por lo que podemos hacer búsqueda binaria para encontrar el primer ; ahora, dado un , cómo computar , podemos restarle a la cantidad de números que son múltiplos de algún primo menor que , y esta cantidad se puede calcular con principio de inclusión-exclusión con los primos menores que ; si es la cantidad de primos menores o iguales que , entonces podemos implementar esta idea en tiempo . Esta solución funciona en tiempo para , ya que . Ahora la otra solución es cuando . Primero notemos que queremos hallar un número de la forma , tal que el menor primo que divide a es mayor o igual que ; entonces , y por tanto ; entonces con una criba hasta podemos computar el menor primo que divide a cada número, y luego iteramos por y contamos cuáles no son divisibles por primos menores que , la complejidad en tiempo está dominada por cómo hacemos la criba, esta podemos hacerla en tiempo lineal, por lo que es . Lo que si creo que está muy restringida es la memoria límite, en mi solución tuve que hacer algunas optimizaciones en memoria, por lo demás todo bien.