第5講 問題における数字の配置をいかにするか?
第2話 互いに素と均等な配置がどうして結びつくの?

均等に配置するということと互いに素は一見無関係なように見えます。
ところが大いに関係があるのです。
例えば、
1234567
という数字の列について、
次のルールに基づいて数字の列を飛ぶとします。
①任意の場所からはじめる
②そこからからn個ずつ飛ぶ
③右がないときは一番左にいく
③は123456712345671234567123456712345671234567・・と無限に続いていていると考えても結構です。
さて、このルールでたとえば4からはじめて3飛びでやってみます。
4→7→3→6→2→5→1
となります。
7回ですべての数字を網羅しました。
4からはじめて2飛びでやっても
4→6→1→3→5→7→2
で7回で網羅します。
1234567の場合は、
任意の場所からはじめても2飛び、3飛び、4飛び、5飛び
のいかな飛び方でも7回で網羅します。
それは、
(7,2),(7,3),(7,4),(7,5)
のすべてが互いに素であるからです。
ところが123456の場合には、
3からはじめて2飛びの場合
3→5→1→3→5→1→3→5→1→・・・
永久に飛び続けても3,5,1の3つの数字をカバーするだけで、
2,4,5は落ちてしまいます。
3からはじめて3飛びの場合
3→6→3→6→3→6→3→6→・・・
3と6しかカバーできずに、1,2,4,5が落ちてしまいます。
3からはじめて4飛びの場合
3→1→5→3→1→5→3→1→5→・・・
3,1,5の3つしかカバーできずに、2,4,6が落ちてしまいます。
理由はおわかりですね。
(6,2),(6,3),(6,4)
のいずれも互いに素ではありません。

こんな話をされてもまだ均等な配置と互いに素の2つはまったく結びつきませんね。
でも、次のように問うたらどうですか。
01234・・・80
について11からはじめて
7飛びをしたらすべての数字を網羅するか?
答えは30行下に書きます。






























答え 網羅する

11 18 25 32 39 46 53 60 67
74 0 7 14 21 28 35 42 49
56 63 70 77 3 10 17 24 31
38 45 52 59 66 73 80 6 13
20 27 34 41 48 55 62 69 76
2 9 16 23 30 37 44 51 58
65 72 79 5 12 19 26 33 40
47 54 61 68 75 1 8 15 22
29 36 43 50 57 64 71 78 4

始めは任意で何でもよく、
81と飛びの数が互いに素であるときに、
81回ですべてを網羅します。
81という数字に怪訝な顔をされている人もいると思いますが、
その方は0123・・・80という場合81種類の数字があることをお忘れになっていますよ。

でもなんでこの話と均等配置が結びつくの?
の疑問は消えていませんよね。
でも上の数字をセル番号であると考えたらどうでしょうか。
今はヒント数81ですから、全部埋まってしまいますが、
ヒント数を24にすると、

11 18 25 32 39 46 53 60 67
74 0 7 14 21 28 35 42 49
56 63 70 77 3 10 17 24 31
38 45 52 59 66 73 80 6 13
20 27 34 41 48 55 62 69 76
2 9 16 23 30 37 44 51 58
65 72 79 5 12 19 26 33 40
47 54 61 68 75 1 8 15 22
29 36 43 50 57 64 71 78 4

ピンクのセル番号にだけ数字を配置すればよいのです。
するとどんな配置になるかと申しますと、
001
大事な点はヒント数81であっても配置できるので、
任意のヒント数で配置できることです。
ですから、ヒント数が20であっても51であってもよいのです。
ちなみにヒント数が20だと
002
ですし、ヒント数が51だと
003
となります。いずれにしろ比較的均等に配置されていることがわかります。
始まりを0から80までの任意の数にして、
飛びを81とは互いに素になる数を選れべば均等な配置は出来ます。
でも、ナンプレ雑誌に載っている問題は線対称か点対称になっていますよね。
対称でないとユーザに使ってもらえないかもしれませんね。
でも対称の問題はあっさり解決します。
004
半分を左に配置してからそれと対称な位置に配置すればよいのです。
もちろん、ヒント数が奇数の場合には真ん中の列にも配置します。
偶数の場合に真ん中の列を使わないのはもったいないですよね。
でも少し複雑になりますが、この問題を解消することはそんなに難しくはありません。


では、皆さんに非対称形の配置をするプログラムを作っていただきます。
添付ファイル
をクリックしていただいて
Dim w As Byte, yz(80) As Byte, xz(80) As Byte
Private Sub CommandButton1_Click()
  CommandButton2_Click
  w = 11
  hitaisyou
End Sub
Sub hitaisyou()
  Dim i As Byte, a As Byte
  For i = 0 To 23
    



  Next
End Sub
Private Sub CommandButton2_Click()
  Rows("3:200").Select
  Selection.ClearContents
  Cells(2, 1).Select
End Sub




For文のところに2行入れて001を実現してください。

考え方は、1234567について3からはじめて4飛びによって7回で網羅するには、
  w = 3
  For i=0 to 6
    a = (w+ 4 * i) mod 7
       ・
  Next
です。

第1話へ 第3話へ


トップへ