Editorial for Número con menor factor primo


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.

Author: aniervs

Tendremos dos soluciones diferentes que por sí solas no son suficientes, pero en conjunto resuelven todos los casos.


Solución para P pequeño

Digamos que f(x) es la cantidad de números menores que o iguales a x cuyos menor factor primo es P. Notemos que f(x) es una función no decreciente, y por tanto, podemos hacer búsqueda binaria para encontrar el primer número t tal que f(t) \ge N, y esa es la solución. Durante la búsqueda binaria debemos computar f(x) para ciertos valores de x. Podemos usar el principio de inclusión-exclusión para contar la cantidad de números en el rango [1, x] cuyo menor factor primo es menor que P. Si \pi(x) es la cantidad de números primos menores que o iguales a x, enotonces esta solución toma complejidad temporal \mathcal{O}(2^{\pi(P)}\cdot \log(10^9/P)), lo cual pasa en el tiempo límite para P\le 82, ya que \pi(82) = 22.

Para P > 82 usaremos la otra solución.


Solución para P grande.

Queremos hallar un número de la forma P\cdot x \le 10^9 de manera que el menor factor primo de x sea mayor que o igual a P. Entonces x \le \frac{10^9}{P}, y dado que P \ge 83, tenemos que x \le \frac{10^9}{83} \implies x < 1.25\cdot 10^7. Entonces, podemos usar primeramente una criba, que compute para cada número hasta 1.25\cdot 10^7 cuál es su menor factor primo. Luego, podemos iterar por cada x \le \frac{10^9}{P} y contar cuántos de ellos no tienen factores primos menores que P. Una vez que llegamos a N ya tenemos el que queremos. El cuello de botella de esta solución está en la implementación de la criba, la cual se puede hacer de manera lineal. Por tanto, esta solución funciona bien para P > 82.


Comments

There are no comments at the moment.