剰余計算の調査より

 投稿者:GAIメール  投稿日:2008年12月25日(木)15時23分30秒
  数学に詳しい方は以下のことは明白なことであるでしょうが、私にとっては大発見でした。
以前
トランプのシャッフルに興味があったとき、次のことを調べていました。
カード(2n枚)でインのリフルシャッフルをしたとき、
<いま、カードが 2n枚
a1、a2、・・・、an、b1、b2、・・・、bn
あるとき、その順序を並べ替えて、
b1、a1、b2、a2、・・・・・・・・、bn、an
となるとき、
2n 枚のカードが「インでリフルシャッフル」されたということにする。>

これについて調べていくと(2~100枚で調査)

枚数 同順復元回数 逆順復元回数    枚数 同順復元回数 逆順復元回数
2   2           1              52 52         26
4   4           2              54 20
6   3                          56 18           9
8   6           3              58 58         29
10 10         5              60 60         30
12 12         6              62   6
14   4                        64 12           6
16   8         4              66 66         33
18 18         9              68 22
20   6                        70 35
22 11                        72   9
24 20       10              74 20
26 18         9              76 30
28 28       14              78 39
30   5                        80 54         27
32 10         5              82 82         41
34 12                        84   8
36 36       18              86 28
38 12                        88 11
40 20       10              90 12
42 14         7              92 10
44 12                        94 36
46 23                        96 48         24
48 21                        98 30         15
50  8                      100100        50

なる調査結果を得ていました。

このことから、トランプ(52枚)で
アウトのリフルシャッフル(元のトップとボトムを常に再びリフル後のトップとボトムにする。)をすれば、52枚のアウトシャッフル=50枚のインシャッフルに同じなので、8回
で元に戻ることが起きることになる。

ところでここに出てくる数字がランダムに並んでいくことに不思議さを感じていました。
今度、作成して頂いたa^n(mod k)を計算して表を作成して、眺めていてある関係があることに気づきました。

この同順復元回数が
a=2,k=カードの枚数+1で計算させたとき、余りの値が1を最初にとる時のnに対応した。
<例>
カード52枚なら
 2^n≡1(MOD53)
なる最小のnが同順復元回数になっていた。
また
 2^n≡52 (MOD53)
なる最小nが逆順復元回数を知らせる。

トランプシャッフルと剰余が思わぬところで繋がったことにさらに不思議さが深まりました
 

Re: 剰余計算の調査より

 投稿者:山中和義  投稿日:2008年12月25日(木)16時50分57秒
  > No.198[元記事へ]

GAIさんへのお返事です。

> カード52枚なら
>  2^n≡1(MOD53)
> なる最小のnが同順復元回数になっていた。
> また
>  2^n≡52 (MOD53)
> なる最小nが逆順復元回数を知らせる。



1回のシャッフルでカードkが現れる位置をf(k)は(カードkはf(k)番目にある)
 f(k)=MOD(2*k,n+1)
と表せる。

m回シャッフルを繰り返すと
f(f(f(…(f(k)))))=2*(2*(2*…(2*k mod n+1) mod n+1) mod n+1) mod n+1=2^m*k mod n+1


一覧表をつくるプログラム
!リフルシャッフル

!n枚のカードを1,2,3,…,n-1,nに並べる。
!1回のシャッフルでカードkが現れる位置をf(k)と表す。(カードkはf(k)番目にある)
DEF f(k)=MOD(2*k,n+1)

FOR n=2 TO 100 STEP 2 !偶数
   PRINT USING "### 枚:":n;

   LET x=1 !カードxに着目
   LET iter=1000
   FOR m=1 TO iter !m回のシャッフル ※
      LET x=f(x) !2^m*k (mod n+1)
      !!!PRINT m;x
      IF x=n THEN PRINT USING "### 回目で逆順、":m; !逆順
      IF x=1 THEN EXIT FOR !もとに戻る
   NEXT m
   IF m>iter THEN
      PRINT USING "### 回では元に戻りません。":m
   ELSE
      PRINT USING "### 回目に元に戻る":m
   END IF

NEXT n

END


UBASICのmodinv関数を使った場合(サブルーチンは省略)
FOR n=2 TO 100 STEP 2 !偶数
   PRINT USING "### 枚:":n;

   LET iter=1000
   FOR m=1 TO iter
      LET x=modinv(2^m,n+1) !1枚目のカードの元の位置を得る
      IF x=n THEN PRINT USING "### 回目で逆順、":m; !逆順
      IF x=1 THEN EXIT FOR !もとに戻る
   NEXT m
   IF m>iter THEN
      PRINT USING "### 回では元に戻りません。":m
   ELSE
      PRINT USING "### 回目に元に戻る":m
   END IF

NEXT n
END
 

Re: 剰余計算の調査より

 投稿者:山中和義  投稿日:2008年12月26日(金)15時25分9秒
  > No.198[元記事へ]

GAIさんへのお返事です。


以前、山を使ったシャッフルがあったと思います。

「あるシャッフル方法の規則性」 > No.109 [元記事へ]


この場合は、

 LET p=3 !山の数
 DEF f(k)=MOD(p*(n-k+1),n+1)

 ただし、n=m*p(nはpの倍数)。

となるので、modpow関数またはmodinv関数を使うなら(サブルーチンは省略)
!山を使ったシャッフル
LET p=3 !山の数

FOR n=p TO 100 STEP p !pの倍数
   PRINT USING "### 枚:":n;

   LET iter=1000
   FOR m=1 TO iter
   !!!LET x=modinv((n*p)^m,n+1) !1枚目のカードの元の位置(カード番号)を得る
      LET x=modpow(n*p,m,n+1) !1番のカードの位置を得る
      IF x=n THEN PRINT USING "### 回目で逆順、":m; !逆順
      IF x=1 THEN EXIT FOR !もとに戻る
   NEXT m
   IF m>iter THEN
      PRINT USING "##### 回では元に戻りません。":m
   ELSE
      PRINT USING "### 回目に元に戻る":m
   END IF

NEXT n

END

で回数が求まると思います。
 

戻る