Mathematica, 82 байта
Используя образец представления из ответа @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)&
Входные данные:
[17]
Выход:
9999999999999999
И относительно аргумента в комментариях при ответе @ Jenny_mathy с @Phoenix ... RepeatedTiming[]
приложения на вход [17]
дает
{0.000518, 9999999999999999}
так пол миллисекунды. Переходя к немного большему вводу [2003]
:
{3.78, 99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999}
чуть меньше 4 секунд.
Тестовая таблица: по первым 30 положительным целым числам результаты
{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}
Объяснение: Единственное волшебство здесь - это пользовательский итератор («итератор» в смысле CS, а не M'ma)
n := If[ y>0 , y-- ; x++ , y=d ; d++ ; x=1]
который воздействует на глобальные переменные x
, количество ведущих "9", y
количество конечных "0" и d
общее количество цифр. Мы хотим перебрать количество цифр и, для каждого выбора количества цифр, начать с наибольшего числа «0» и наименьшего числа «9». Таким образом, первое, что делает код, это инициализирует d
в 1, форсирует x
в 1 и является желаемым значением .)y
0. Пользовательский итератор проверяет, может ли строка «0» быть сокращена. Если это так, он сокращает строку «0» на единицу и увеличивает строку «1» на единицу. Если нет, он увеличивает число цифр, устанавливает число «0» на единицу меньше числа цифр и устанавливает число «9» на 1.d
y