パスカルの三角形を塗りわけてフラクタル図形を作ろうとしてるのですが,思わぬところで難問にぶつかってしまいました。

正の整数 N について

N! = p * 2^k

と表す。ここで p は奇数,k は整数 である。k を求めるにはどうしたらよいか。 たとえば N = 5 であれば,

4! = 120 = 15 * 2^3, → k = 3

というふうに。これを任意の N について簡単に求めたい。

で,考え始めたけど分からんのです。もうひとつ砕いて考えると,

任意の正の整数 i について,i を素因数分解したら 2 は何個現れるか

という問題に帰着します。ノートに書き並べていくと,規則性があるけれども,単純じゃないんですね。どうもこれは一筋縄ではいかないような。うーむ

そうですね。関数というわけにはいかないのでしょう。元々の階乗の中に2が因数として幾つ含まれるかという問題は、Nが偶数の場合だけを考えれば良いわけですよね。プログラムは書けても、定式化は無理ですね。きっと。

因みに規則性って、

1,2,1,3,1,2,1,4,1,2,1,3,1,2,1,5, 1,2,1,3,1,2,1,4,1,2,1,3,1,2,1,6,
1,2,1,3,1,2,1,4,1,2,1,3,1,2,1,5, 1,2,1,3,1,2,1,4,1,2,1,3,1,2,1,7,
1,2,1,3,1,2,1,4,1,2,1,3,1,2,1,5, 1,2,1,3,1,2,1,4,1,2,1,3,1,2,1,6,
1,2,1,3,1,2,1,4,1,2,1,3,1,2,1,5, 1,2,1,3,1,2,1,4,1,2,1,3,1,2,1,8,
1,2,1,3,1,2,1,4,1,2,1,3,1,2,1,5, 1,2,1,3,1,2,1,4,1,2,1,3,1,2,1,6,
1,2,1,3,1,2,1,4,1,2,1,3,1,2,1,5, 1,2,1,3,1,2,1,4,1,2,1,3,1,2,1,7,
1,2,1,3,1,2,1,4,1,2,1,3,1,2,1,5, 1,2,1,3,1,2,1,4,1,2,1,3,1,2,1,6,
1,2,1,3,1,2,1,4,1,2,1,3,1,2,1,5, 1,2,1,3,1,2,1,4,1,2,1,3,1,2,1,9,...

ですよね。これぞフラクタル!?ですかな。

プログラミングでは「関数」はいろいろな手続きを含めてるんだけど,それはともかくとして,毎回描画のたびに関数呼び出ししていたら遅くなりそう。最初に計算して一気にテーブルを作成しておくのがよさそうですねえ。

しかし,それにしても,しらみつぶしじゃないうまいアルゴリズムないかなあ。

やはり、家の環境では書き込めませんねえ。タイムラグがありますが、フラクタルな構造はこんな具合ですね。rubyだと簡単に実装できますよ。

0  最初に0を1つ準備
1  全部に1を足す
0 1 0  間に0を埋める
1 2 1  全部に1を足す
0 1 0 2 0 1 0  間に0を埋める
1 2 1 3 1 2 1  全部に1を足す
0 1 0 2 0 1 0 3 0 1 0 2 0 1 0 間に1を埋める、、、

さて、このアルゴリズムで(虱潰しですが)作れます。ドラゴンカーブ?なんかと同じですね。、、、ってなんだか断言しただけで「検証」というか「論証」というか「何故かの説明」はありません。どなたか簡単に説明を付けてください。

ってそうかあ、2進数にして、一の位?から連続する0の数を数えれば因数としての2の数が分かるわけですよね。ふむふむ。

5!(10進)=101×100×11×10×1(2進) だから、3
               ^^       ^

ってそうかあ、そもそもパスカルの三角形を色で塗り分けて「フラクタル図形」なんだから、構造的に仕方ないのですよね。


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS