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}
説明:ここでの唯一の魔法はカスタムイテレータ(M'maセンスではなく、CSセンスの「イテレータ」)です
n := If[ y>0 , y-- ; x++ , y=d ; d++ ; x=1]
これは、グローバル変数x
(先頭の「9」の数)に作用し、y
数、末尾の「0」のd
数、および合計桁数にます。桁数を反復処理し、桁数の選択ごとに、最大の「0」と最小の「9」で開始します。したがって、コードが最初に行うことは、1に初期化d
することであり、1に強制x
しy
0にます。カスタムイテレータは、「0」の文字列を短縮できることを確認します。その場合、「0」の文字列を1つ短くし、「1」の文字列を1つ増やします。そうでない場合は、桁数を増やし、「0」の数を桁数より1少ない数に設定し、「9」の数を1に設定します。d
の望ましい値ですy
。)