機械のギア比の計算                       
 元日の朝(元旦?)、当ホームページの掲示板に、東京在住の方から、次のような書き込み
があった。
 4つのギアの歯の枚数を、a、b、c、d とする。 任意のギア比 m (0<m<1)
に対して、
                   
となる自然数 a、b、c、d の値を、数表を用いず、計算で求めたい。どうしたらよいか?
 但し、a、b、c、d は、20以上120以下の値で、m との誤差は、0.0001以下としたい。
 聞く所によると、数表は小数点以下6桁までの数値(m)に対応した4つの整数(a、b、c、d)
が並んだもので、数十ページあり、B5サイズ位の単行本ほどあるそうだ。今までは、この数
表を使っていたが、これを計算でできないものかと、ずっと考えられていたとのことである。
 この問題に対して、私は、次のように考えた。 問題を整理して、
    1.0と1の間の任意の数 m を与える。
    2.m−0.0001<b/a<m+0.0001となる自然数 a、b を求める。
       ただし、a、b は400以上14400以下の数で、それぞれ
          P×Q (但し、P、Q は、20以上120以下の自然数)
       の形に素因数分解されるものとする。
 数学的な計算公式が思い浮かばなかったので、表計算ソフト Excel の助けを借りること
にした。
 以下で、例えば、m=0.4329 に対する計算方法を示す。他の m の値に対しても同様
である。

 各セルには、関数が組み込まれている。例えば、3201行については、次のような関数が
定義されている。
  B3201=FA(A3201,2) ・・・・・VBAにより作成された関数(下記参照)
  D3201=A3201*$D$1−INT(A3201*$D$1)
  E3201=IF(D3201<0.01,INT(A3201*$D$1),””)
  F3201=IF(E3201=””,””,FA(E3201,2))
  G3201=IF(E3201=””,””,E3201/A3201−$D$1)
また、条件にあっているかどうかを判断するために、D列、G列には、条件付き書式が、次の
ように設定されている。
   D列では、a の値の order が、102以上なので、0.01以下の場合に赤字を返す。
   G列では、問題の条件通り、−0.0001以上で0.0001以下の場合に赤字を返す。
(注) 各自然数に対して、その素因数分解(1つの数を、素数の積で表すこと)を返す関数
    FAは、VBAを用いて次のように記述される。
 Function  FA(n,d)
  If n<d*d  Then
   FA=n
  Else
  If n−Int(n/d)*d=0 Then
   FA=d & ”X” & FA(n/d,d)
  Else
  If d=2 Then
   d=3
  Else
  If d=3 Then
   d=5
  Else
  If d Mod 6 =1 Then d=d+4 Else If d Mod
6 =5 Then d=d+2
  End If
  End If
   FA=FA(n,d)
  End If
  End If
 End Function
    Excel を起動し、[ツール]−[マクロ]−[Visual Basic Editor] とクリックして
   Editor を起動し、[挿入]−[標準モジュール] を選択して、上記を記述すればよい。
   後は、Excelの任意のセルに、例えば、 =FA(8614,2) と打ち込むと、瞬時に、
   2×59×73 という、8614 の素因数分解が得られる。
以上の方法で、m=0.4329 の場合に適する自然数は、8組発見された。
| aの値 | bの値 | 誤差 b/a−m の絶対値 | |
| 1 | 2×13×47 | 23×23 | 0.00000310966 | 
| 2 | 24×5×19 | 2×7×47 | 0.00000526316 | 
| 3 | 22×13×47 | 2×232 | 0.00000310966 | 
| 4 | 59×61 | 2×19×41 | 0.00000197278 | 
| 5 | 52×132 | 31×59 | 0.00000059172 | 
| 6 | 2×59×73 | 3×11×113 | 0.00000006966 | 
| 7 | 23×3×13×31 | 53×79 | 0.00000090985 | 
| 8 | 24×54 | 32×13×37 | 0 | 
 上の表によれば、題意を満たす4つの自然数の組 (a,b,c,d) として、例えば、次のよう
なものが考えられる。
     
 質問者の方に伺うところによれば、m に要求されている誤差の範囲を考えれば、どうして
も4枚の組合せでないと、大抵の場合うまくいかないとのことである。
 しかしながら、上の計算方法でも分かるように、基本的には、素因数分解可能な2つの自
然数について、まず精査し、その中で、いろいろな歯車の組合せを考えた方が考えやすい
のではないかと思う。
 以上の計算を見ると、多くの方は、「数表を使った方がはやいのでは?」と多分思われる
だろう。それが、数表そのものが持つ価値だと私は思うが、その数表に載っている数の組
を独自に発見することも、数表を使いこなす以上に大切なことと私は考える。
 今回上に述べたことが、質問者の意図を100%理解しきって述べているとは、到底考え
られない。このページを見て、「こう考えたらいいのでは?」という方が現れることを期待す
るのみである。