MENU
175,909

スレッドNo.1843

計算結果の信憑性を確認したい。

どなたか
数字の1から18までを一つずつ使って
9個の1より小さい既約分数を作ることが
出来る組合せが何通り出来るか調べてくれませんか?
計算で求まるのか?
コンピュータでプログラム的に処理できるのか?
どちらでも構いませんのでお願いします。

引用して返信編集・削除(未編集)

https://oeis.org/A009679
↑これで正しければ
59616通りだと思います。
計算で出すのは難しいと思います。
# n=2,4,6,…,18に対する組合せ数をプログラムで調べ、結果の数列を検索したら一致するものがありました。

引用して返信編集・削除(編集済: 2024年04月14日 11:40)

世界中では誰なっと調べ上げているものですね。
私は一週間ぐらい試行錯誤を繰り返し、プログラムを色々書き直しやっと全部で58320通りを求めたと思っていたんですが
どこかに見落としがあるのかな~。
自分でも何度も見直したんですがそれが分からないのです。

(考え方)
全部が規約な分数であるため、分子と分母は奇数、偶数での組合わせとなるので
A=[2,4,6,8,10,12,14,16,18]
B=[1,3,5,7,9,11,13,15,17]
の2組に分け
AとBを組合わせてできる1より小さい既約分数は次の69個で
M=[1/2, 2/3, 2/5, 2/7, 2/9, 2/11, 2/13, 2/15, 2/17,
1/4, 3/4, 4/5, 4/7, 4/9, 4/11, 4/13, 4/15, 4/17,
1/6, 5/6, 6/7, 6/11, 6/13, 6/17,
1/8, 3/8, 5/8, 7/8, 8/9, 8/11, 8/13, 8/15, 8/17,
1/10, 3/10, 7/10, 9/10, 10/11, 10/13, 10/17,
1/12, 5/12, 7/12, 11/12, 12/13, 12/17,
1/14, 3/14, 5/14, 9/14, 11/14, 13/14, 14/15, 14/17,
1/16, 3/16, 5/16, 7/16, 9/16, 11/16, 13/16, 15/16, 16/17,
1/18, 5/18, 7/18, 11/18, 13/18, 17/18]
これから組合わせて調べるのは対象が多すぎるので手分けしていく。

(1)1/2を使うとすれば残りは1,2の数字をふくまない物から構成するので
Q1=[ 3/4, 4/5, 4/7, 4/9, 4/11, 4/13, 4/15, 4/17]
Q2=[5/6, 6/7, 6/11, 6/13, 6/17]
Q3=[ 3/8, 5/8, 7/8, 8/9, 8/11, 8/13, 8/15, 8/17]
Q4=[3/10, 7/10, 9/10, 10/11, 10/13, 10/17]
Q5=[5/12, 7/12, 11/12, 12/13, 12/17]
Q6=[ 3/14, 5/14, 9/14, 11/14, 13/14, 14/15, 14/17]
Q7=[3/16, 5/16, 7/16, 9/16, 11/16, 13/16, 15/16, 16/17]
Q8=[5/18, 7/18, 11/18, 13/18, 17/18]
に分けて置き
for(n1=1,8,Q1[n1])
for(n2=1,5,Q2[n2])
for(n3=1,8,Q3[n3])
for(n4=1,6,Q4[n4])
for(n5=1,5,Q5[n5])
for(n6=1,7,Q6[n6])
for(n7=1,8,Q7[n7])
for(n8=1,5,Q8[n8])
でそれぞれのグループから既約分数を組合わせていく。
その組合わせが異なる16個の異なる数字から作られていればカウントして集計する。
こうして求まった集計がs1=4788が得られた。

同様な考え方で
(2)2/3を使うとすれば残りは2,3を含まない物から組み合わせていくので
Q1~Q8をそれに合わせて選び直し、条件を満たすものをカウントしていくと
s2=9144
以下同様で
(3)2/5を使う場合
s3=5328
(4)2/7を使う場合
s4=5184
(5)2/9を使う場合
s5=9144
(6)2/11を使う場合
s6=4788
(7)2/13を使う場合
s7=4788
(8)2/15を使う場合
s8=10368
(9)2/17を使う場合
s9=4788

以上から求める総数は
4788*4+5184+5328+9144*2+10368=58320通り
なのです。
これが正解と思われる59616通りなので1296通りは何処へ行ったのか?

引用して返信編集・削除(未編集)

(8)2/15を使う場合
の値は10368でなく11664です。
その他はすべて合っていました。

引用して返信編集・削除(未編集)

2/15のチェックをしたら
Q4=[[1, 10], [3, 10], [7, 10], [9, 10], [10, 11], [10, 13], [10, 17]]
に対する
for(n4=1,7,Q4[n4])でのチェックであるべき所を
for(n4=1,6,Q4[n4])
と間違って処理していたことが原因であることが判明しました。
間違えない様に慎重に進んでいた調査も終盤に近くなった頃にタイプミス
を発生させてしまっていた。
再度for(n4=1,7,Q4[n4])での確認ではs7=11664で一致出来ました。

間違えたのに気付くためには、間違ったことを確認した後でしか見えてこないので厄介です。

引用して返信編集・削除(未編集)

Q1,Q2,…をプログラムで生成し、その個数を(プログラムで自動的に)ループカウントにすれば間違えることはなくなると思います。

引用して返信編集・削除(編集済: 2024年04月15日 00:13)

人がプログラムを作っているのを参考にしていたら
あんなに何日も考えてやっと手に入れた数値が
gp > matpermanent(matrix(9,9,i,j,gcd(2*i,2*j-1)==1))
%192 = 59616通り
の一発で行けるという。
従って1~32の数字をそれぞれ一度しか使用できなく
16個の1より小さい既約分数を(4×4行列を作れる)
作れる組合せの総数は
gp > matpermanent(matrix(16,16,i,j,gcd(2*i,2*j-1)==1))
%193 = 768372168960通り
からとてもまともには求めることが難しい大きさでも、いとも簡単にわかるという!!
ほんとに数学の力(中にある数学的構造の不思議さ)を感じます。

引用して返信編集・削除(未編集)

計算で一般的に出すのは難しいとしても、今回の数値設定に限るならさほど難しくないですよ。

とりあえず 2 と 3 で約分できないように分数を作る方法は、
6 の倍数を使う 3 組、3 の倍数と 2 の倍数を使う 3 組、残り 3 組の順に考えて、
6P3 * 6P3 * 3! = 86400 通り

この中で、

5/10 ができてしまう組が
5P3 * 5P3 * 2! = 7200 通り

10/15 ができてしまう組が
6P3 * 5P2 * 3! = 14400 通り

7/14 ができてしまう組が
5P3 * 5P3 * 2! = 7200 通り

5/10 と 7/14 がともにできてしまう組が
4P3 * 4P3 * 1! = 576 通り

10/15 と 7/14 がともにできてしまう組が
5P3 * 4P2 * 2! = 1440 通り

よって、いずれも既約分数になる組は
86400-7200-14400-7200+576+1440 = 59616 通り

引用して返信編集・削除(未編集)

すみませんDD++さん
説明文とそれを示す式が私の頭では何をどう考えたら成り立つのか全く見えてきません。
例えば
6 の倍数を使う 3 組、3 の倍数と 2 の倍数を使う 3 組、残り 3 組の順に考えて、
6P3 * 6P3 * 3! = 86400 通り
はて?
6P3の6は何を指した6なのか?
3!は何をもって3!にするのか?
以下後の方の説明文と式の意味が全く読み取れなくいます。
計算とそれから導かれる結果は正しいのだから、それぞれには導く理由を持つ
根拠がある事は理解できるんですが、全体を通した構想のあらすじが見えていない
事なんだと思います。
もう少し解説を入れて説明願えませんか?

引用して返信編集・削除(未編集)

18 までの中には偶数が 9 個あるので、2 で約分できないためには全て偶数と奇数で対にして分数を作る必要があります。

そして、3 でも約分できないように対にするには、
・6 の倍数(3 つある)には 3 で割り切れない奇数(6 つある)の中から 3 つ選んで割り当てる
・3 の倍数である奇数(3 つある)には、3 で割り切れない偶数(6 つある)の中から 3 つ選んで割り当てる
・残った 3 つずつは、適当に偶数と奇数のペアを 3 組作る
ことになります。
だから 6P3 * 6P3 * 3! = 86400 通りとなります。

それ以後も、指定の分数を最初に作ってしまうことにすると何個から何個選ぶかが変わりますが、考え方は同じです。

引用して返信編集・削除(未編集)

このスレッドに返信

ロケットBBS

Page Top