Mathematica, 82 bayt
@Jenny_mathy 'nin cevabından gönderim kalıbını kullanarak ...
(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)&
Giriş:
[17]
Çıktı:
9999999999999999
Ve ile Jenny_mathy cevabı @ de yorumlardaki argüman göreli @Phoenix ... RepeatedTiming[]
girişine uygulamanın [17]
verir
{0.000518, 9999999999999999}
bu yüzden yarım milisaniye. Bir biraz daha büyük girişine gidiyor [2003]
:
{3.78, 99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999}
4 saniyenin altında bir bit.
Test tablosu: İlk 30 pozitif tamsayıda sonuçları
{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}
Açıklama: Buradaki tek sihir özel yineleyicidir (CS anlamında "yineleyici", M'ma anlamında değil)
n := If[ y>0 , y-- ; x++ , y=d ; d++ ; x=1]
küresel değişkenlere etki eden x
, öncü "9" s y
sayısı, "0" s d
sayısını ve toplam basamak sayısını gösterir. Basamak sayısında yineleme yapmak istiyoruz ve her basamak basamağı seçimi için en çok "0" ve en az "9" ile başlıyoruz. Böylece, kodun yaptığı ilk şey d
1'e, x
1'e ve y
0'a zorlayarak başlatılır . Özel yineleyici, "0" s dizesinin kısaltılabildiğini kontrol eder. Öyleyse, "0" s dizesini bir kısaltır ve "1" s dizesini bir artırır. Değilse, basamak sayısını artırır, "0" s sayısını basamak sayısından bire daha az ayarlar ve "9" s sayısını 1'e ayarlar.d
istenen değerdir y
.)