俺も考えてみよう。総当たりとか近似値とかはすでにやっていらっしゃるようなので、確率方面?から。

1桁の数字は 10個 (0を含めて考えてる) あって、3の倍数は 3個。3がつく数字は、1個。重複があるので、3個。

3の倍数は、全体の 1/3 3がつく数字は…。10の位も 1の位も 3じゃない場合を引けばいいから、1 - (8/9 * 9/10) = 1/5 → 全体の 1/5 1/3 と 1/5 で重複分があるから、1/3 + 1/5 - (1/3 * 1/5) = 7/15 全部で 100-90個の数字があるので、90 * 7/15 = 42個。

10000〜99999 の、90000個の数字がある。 3で割り切れる数字は、1/3個。 3がつく数字は、3がつかない数字から考えると、1 - 8/9 * (9/10)^4 = 1 - (9^3)/(10^4) 重複分があるから、1/3 + (1 - ((9^3)/(10^4))) - 1/3 * (1 - ((9^3)/(10^4)))。 なので、900000 * (1/3 + (1 - ((9^3)/(10^4))) - 1/3 * (1 - ((9^3)/(10^4)))) 3がつく数字は、3がつかない数字から考えると、1 - 8/9 * (9/10)^4 = 1 - 8*(9^3)/(10^4) 重複分があるから、1/3 + (1 - (8*(9^3)/(10^4))) - 1/3 * (1 - (8*(9^3)/(10^4)))。 なので、900000 * (1/3 + (1 - ((8*9^3)/(10^4))) - 1/3 * (1 - (8*(9^3)/(10^4))))

計算式の解説。

yoggy さんは数に注目して計算されていますが、私はどちらかというと統計的に？確率的に？考えました。

この方式の利点は、総当たりなどをしないために CPU パワーなどほとんど関係なく、時間もかからないこと。桁数の多い計算機があればパソコンなくてもきっと大丈夫。プログラミング言語も知らなくて OK。

では、計算内容です。

(^ は、べき乗です。)

A: 桁数です。

B: A の桁数での、数の数。2桁なら、10〜99 の 90個で、これは 10^2 - 10^1。n桁の場合は 10^n - 10^(n-1)。

C: 3の倍数の割合。誤差は出るがおしなべて 1/3。

D: 3がつく数の割合。たぶんここがこの方式のミソ。まず、3がつかない数を割合を求める。 n桁の場合、頭の桁は 0 はあり得なくて、3 でない数、つまり 1,2,4,5,6,7,8,9 でないとダメだから、9通りのうちの 8通りがあり得る。 頭の桁以外は、3でない数、つまり 0,1,2,4,5,6,7,8,9 でないとダメだから、10通りのうち 9通り。 n桁だから、8/9 * (9/10) * (9/10) * ... * (9/10) = 8/9 * (9/10)^(n-1) が、3がつかない数の割合。 3がつく数の割合は、1- (8/9 * (9/10)^(n-1)) になります。

E: C と D の合計。ただし重複分を除く。C + D - (C * D)

F: アホになる数の数は、総数 * 割合 = B * E。

で、ここまでは桁数ごとに計算していたので、G, H でここまでの合計を計算し、I で割合を求めています。

1桁の場合はハナっから誤差が出るので手計算し、2桁以上はすべて上の計算式で求めてみました。