「高橋の数」(タイプ1)を求めるアルゴリズム                              2000.08.28   アルゴリズム:A1を単純に適用してタイプ1の「高橋の数」を求めること はできない。しかし、min(N)のルール上はタイプ1とタイプ2は単純 な関係がある。 タイプ1とタイプ2の関係を明らかにすることにより、タイプ1の「高橋の数」 を求めるアルゴリズムを導く。 □タイプ1とタイプ2との関係  「高橋の数」の性質3より、X点<L点の範囲を考える。        -----L部--------- ---S部-- ----U部------    max(N) B1B2 ..Bx..Bl Bs...Bs BL..BX0..0   min(N) BX0  ..0 ..BL Bs...Bs Bl..Bx ..B1(タイプ1)             ↑  ↑  ↑           ↑                        X点 L点 S点         U点  T変換  ↓ ↓   の結果  A1A2 ..Ax..Al ...   タイプ1 B1-BX  Bx タイプ2 B1 Bx-Bx    1)結果が0となる可能性があるのは、L点とBx-1〜B2である。    (タイプ1特有の部分(先頭、X点)は0にならない)    即ち、0となる部分は、タイプ1、タイプ2共通の部分である。    ==>タイプ2のA1〜Anを求め、その中の0の個数を求めるとX点       を確定することができる  2)次に、最小値BXを求めることを考える。最小値となりうるのは、    先頭(B1−BX)、L点、U点、(U−1)点である。 (X点は最小値とはならないことに注意)        @先頭が最小値となる場合     B1−BX = BXより、B1=2BX     タイプ2では、B1 = A1, Bx−BX = AX であるから           BX    = A1 / 2 (ただし、A1は偶数)      Bx    = AX + BX      B1−BX = BX    A先頭が最小値でない場合     最小値は、タイプ2のA2〜An(AXは除く)の最小値(m)を     選べばよい。        BX    = m      Bx    = AX + m      B1−BX = A1 − m   以上により、X点、タイプ1のA1、Axを求めることができる。 (これ以外の部分はタイプ1、タイプ2共通である) □アルゴリズム:A3  上記の関係により、0を含む「高橋の数」については、タイプ2のから候補  からタイプ1の候補を生成することができる。以下では、混乱を避けるため  タイプ2の候補をA1〜Anで表し、タイプ1の候補をC1〜Cnで表す。  @アルゴリズム:A1により、A1〜Anを求める  AA1〜Anの中の0の数を求める(=zとする)   z=0のときは、0が存在しないので、Ck=Akとなる。  (以下はz!=0のとき)  Bx=z+1とする。A1とAxを除いた正の最小値をmとする。   ただし、x>=L(x点>=L点)は候補外なので破棄する       CA1>=m*2の場合、以下によりC1〜Cnを求める。    C1=A1−m    Cx=Ax+m    上記以外は、Ck=Ak  DA1<m*2の場合、A1が奇数の時は候補外なので破棄する。A1が   偶数のときは、m =A1/2とし、以下によりC1〜Cnを求める。    C1=A1−m    Cx=Ax+m    上記以外は、Ck=Ak     E上記で求めたC1〜Cnを使って、「高橋の数」のテストをおこなう。