tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^5: 効率的なパンデジタル数作成方法が分かりません
投稿日: 2017/04/19(Wed) 11:57
投稿者nis9036
魔界の仮面弁士様
ありがとうございました。
動きました。10桁パンデジタル数は約350万件ほど。と回答が出ました。
話しの通り十数秒で回答されたので”魔術だ!”と思いました。
プログラムの内容は初心者にはかなり厳しいので取り敢えず 使い方を理解する事を優先し
内容の理解は後回しにするつもりです。
ありがとうございました。

> 魔界の仮面弁士様
> さてやってみようかともう一度本ツリーを覗いてみたら
> もう返事が来ているので驚きました。
> 御手数掛けます。
> Redim Preserve 使っています。と云うのもどれくらいの配列量になるのか分からなかったので一つ見付ける度に
> カウントアップして配列量を増やしてやろう。と安直に考えていました。
> 教えて貰った方法で最初から配列数を指定できます。
> 頭にゼロがくる事についてはValで数値化した時に省けば良かろう。とこれまた安易に考えていました。
> 後ろの桁に行くほど選択肢が狭くなる事には気が付いていましたが、幾つか試して
> 「こんなん リストアップの所で and <> やっとるのとかわらんやんけ」と努力を放棄していました。
> 再帰については ”世の中にそんな方法があるらしく、どうやら不定ループをかなり簡潔に処理できるらしい”
> と云う事だけ知っていました。
> 早速プリントアウトして試してみます。
> 重ね重ねありがとうございました。
>
> > > ListBoxを使うと遅いと分かっていたので実際には配列を使っていました。
> >
> > ReDim Preserve を使ってはいないですよね?
> >
> >
> > > 因みに18時間ぐらい廻していますが120万件ほど集まっていました。
> >
> > その計算ペースですと、終了までには 2〜3 日かかりそうですね。
> > PC 性能にもよりますが、先の私の方法なら 15 秒前後だと思います。
> >
> >
> > >>> 下記の繰り返し処理をやってみたのですが、3桁の場合は良いのですが、
> >
> > 1,2,3 の 3 桁に対して、N1 = 0〜2、N2 = 0〜2、N3 = 0〜2 のループを行っていますよね。
> >
> > これはすなわち、CH の個数を x としたときに、
> > 『x^x 回』のループが行われるということを意味します。
> >
> > x = 3 ならば「27 回」のループが行われることになりますが、
> > それによって求まる組み合わせは、下記の「6 通り」しか
> > ありませんので、かなりの回数が無駄になります。
> >   123
> >   132
> >   213
> >   231
> >   312
> >   312
> >
> >
> >
> > 改めて、1,2,3 の組み合わせについて考えてみましょう。
> >
> > 最初の数字は、1/2/3 のいずれかですよね。
> > 最初の数字が 1 だった場合、次の文字は 2/3 のいずれかですよね。
> > 最初が 1 で二番目が 3 だったら、次の文字は必ず 2 ですよね。
> >
> >
> > このように、後ろの桁になるほど選択肢が狭まることがわかります。
> > これはすなわち、組み合わせ数が『x! 通り』であるということです。
> > (先の私のコードでは、Except 拡張メソッドを再帰的に呼び出すことで対処しています)
> >
> >
> > 計算してみると分かりますが、『x!』と『x^x』とでは、文字通り桁違いの数となります。
> >
> > n = 2 なら「2」と「4」
> > n = 3 なら「6」と「27」
> > n = 4 なら「24」と「256」
> > n = 5 なら「120」と「3,125」
> > n = 6 なら「720」と「46,656」
> > n = 7 なら「5,040」と「823,543」
> > n = 8 なら「40,320」と「16,777,216」
> > n = 9 なら「362,880」と「387,420,489」
> > n =10 なら「3,628,800」と「10,000,000,000」
> > n =11 なら「39,916,800」と「285,311,670,611」
> > n =12 なら「479,001,600」と「8,916,100,448,256」
> >
> > n =16 なら「20,922,789,888,000」と「18,446,744,073,709,551,616」
> >
> > n =32 なら「263,130,836,933,693,530,167,218,012,160,000,000」と
> > 「1,461,501,637,330,902,918,203,684,832,716,283,019,655,932,542,976」
> >
> >
> > ※パンデジタル数では、先頭の数字が 0 になることがありませんので、
> >  10! = 3,628,800 通りではなく、10! - 9! = 3,265,920 通りです。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。