Mathematica, 82 bytes
Usando el patrón de envío de la respuesta de @Jenny_mathy ...
(d=x=1;y=0;f:=(10^x-1)10^y;n:=If[y>0,y--;x++,y=d;d++;x=1];While[Mod[f,#]!=0,n];f)&
Entrada:
[17]
Salida:
9999999999999999
Y en relación con el argumento en los comentarios en la respuesta de @ Jenny_mathy con @ Phoenix ... RepeatedTiming[]de la aplicación a la entrada [17]da
{0.000518, 9999999999999999}
entonces medio milisegundo. Yendo a una entrada un poco más grande [2003]:
{3.78, 99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999}
un poco menos de 4 segundos.
Tabla de prueba: en los primeros 30 enteros positivos, los resultados son
{9, 90, 9, 900, 90, 90, 999999, 9000, 9, 90, 99, 900, 999999,
9999990, 90, 90000, 9999999999999999, 90, 999999999999999999, 900,
999999, 990, 9999999999999999999999, 9000, 900, 9999990, 999,
99999900, 9999999999999999999999999999, 90}
Explicación: La única magia aquí es el iterador personalizado ("iterador" en el sentido CS, no el sentido M'ma)
n := If[ y>0 , y-- ; x++ , y=d ; d++ ; x=1]
que actúa sobre las variables globales x, el número de "9" iniciales y, el número de "0" finales y del número total de dígitos. Deseamos iterar a través del número de dígitos y, para cada elección de número de dígitos, comenzar con la mayoría de los "0" y los menos "9". Por lo tanto, lo primero que hace el código es inicializar da 1, forzar xa 1 yy a 0. El iterador personalizado comprueba que la cadena de "0" se puede acortar. Si es así, acorta la cadena de "0" por uno y aumenta la cadena de "1" por uno. De lo contrario, incrementa el número de dígitos, establece el número de "0" en uno menos que el número de dígitos y establece el número de "9" en 1.des el valor deseado de y.)