| 
    
     |  | G-Luckさん ichinoseさん
 
 お二人ともありがとうございます。
 合同式に関する私の説明が拙く、解りづらかった事と思います。
 私はVBA初心者なので、逆にお二人のVBA記述がなかなか理解できませんが。(笑)
 とりあえず試してみようと思います。
 
 合同式のスクリプトに関する理解は、ichinoseさんのご理解の方が正しいような気がします。そこでお二人にお願いなのですが、VBAで書いたマクロのエクセルシートを直接ファイル添付で送信して頂けないでしょうか?私がこれから書くと非常に時間が、、、、(汗)。
 実は、合同式の解を求める連立は2元と3元両方必要で、もう一度簡単にご説明します。
 
 1)合同式が2つの場合。
 
 x≡ 1 mod 7
 x≡ 4 mod 11
 のとき、一般解はx=77p+15 となります。
 mとnの最小公倍数+kという形ですが、pは任意の整数です。
 
 合同式の基本定理
 x≡y (mod m)において x=y+pm になるという形式です。
 これが、合同式2つになると
 x≡ a mod m
 x≡ b mod n
 のとき、x=LCM(m,n)p+k
 となります。
 よつて、求めたい整数kは
 (n*k+b-a)がmで割って「1」余る[「k」として計算されます。
 なので、ichinoseさんに理解して頂いたとおり
 「つまり、0〜最小公倍数-1の数値の間で
 mで割ってあまりがaかつ、nで割ってあまりがbになる値を求める方法です」
 で正解かと思われます。
 
 よって
 x≡ 1 mod  7
 x≡ 4 mod 11
 congruence(7,11,1,4)=15 と LCM(7,11)=77
 で一般解は
 x=77p+15
 
 2)合同式が3つの場合 例えば
 
 x≡ 2 mod 3
 x≡ 3 mod 5
 x≡ 2 mod 7
 まず
 x≡ 2 mod 3
 x≡ 3 mod 5
 の一般解congruence(3,5,2,3)=8 と LCM(3,5)=15 を求めます。
 次に
 x≡ 8 mod 15
 x≡ 2 mod 7
 としたうえで、2つの合同式の場合と同じように
 x≡ 8 mod 15
 x≡ 2 mod 7
 congruence(7,15,2,8)=23 と LCM(15,7)=105を求めて
 x=105p+23
 となります。
 
 できれば、上記2つのVBAがマクロで作動するエクセルブックを2つ、下記アドレスまでご送信頂けると助かります。
 セルの場所はA1からそれぞれ
 x≡a(mod m)
 x≡b(mod n)
 x=K
 
 x≡a(mod M)
 x≡b(mod L)
 x≡c(mod N)
 x=K
 
 という形でかまいません。よろしくおねがい致します。
 
 sattshi_2005@mail.goo.ne.jp
 
 |  |