Mathematica, 82 byte
Menggunakan pola pengajuan dari jawaban @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)&
Memasukkan:
[17]
Keluaran:
9999999999999999
Dan relatif terhadap argumen dalam komentar di jawaban @ Jenny_mathy dengan @Phoenix ... RepeatedTiming[]
aplikasi ke input [17]
memberikan
{0.000518, 9999999999999999}
jadi setengah milidetik. Pergi ke input sedikit lebih besar, [2003]
:
{3.78, 99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999}
sedikit di bawah 4 detik.
Tabel uji: Pada 30 bilangan bulat positif pertama, hasilnya adalah
{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}
Penjelasan: Satu-satunya keajaiban di sini adalah iterator khusus ("iterator" dalam pengertian CS, bukan arti M'ma)
n := If[ y>0 , y-- ; x++ , y=d ; d++ ; x=1]
yang bertindak pada variabel global x
, jumlah "9" s,, y
jumlah trailing "0", dan d
, jumlah total digit. Kami ingin mengulang melalui jumlah digit, dan, untuk setiap pilihan jumlah digit, mulai dengan "0" paling banyak dan paling sedikit "9". Jadi hal pertama yang dilakukan kode adalah menginisialisasi d
ke 1, memaksa adalah nilai yang diinginkan .)x
ke 1 dany
ke 0. Iterator kustom memeriksa bahwa string "0" dapat dipersingkat. Jika demikian, itu memendek string "0" s satu dan meningkatkan string "1" s satu. Jika tidak, itu menambah jumlah digit, menetapkan jumlah "0" menjadi satu kurang dari jumlah digit, dan mengatur jumlah "9" menjadi 1.d
y