第19講 座標の工夫による魔方陣自動生成ソフトの高速化
第10話 改良魔方陣自動生成ソフトに乱数を組み込む
答えは(iii+ii)%(n*n)+1です。
long f(int *k,int **x,int n,long cn,int g,int *p,int *q){
int i,j,s,t,w,v;
s=q[g];
t=p[g];
int ii,iii;
ii=rand()%(n*n);
for(iii=1;iii<n*n+1;iii++){
i=(iii+ii)%(n*n)+1;
x[s][t]=i;
とすることによって、iの発生順番が変わり循環します。
例えば、n=4かつii=9のときでトレースしてみましょう。
iii=1のとき、
i=(iii+ii)%(n*n)+1=(1+9)%(4×4)+1=10%16+1=10+1=11
iii=2のとき、
i=(iii+ii)%(n*n)+1=(2+9)%(4×4)+1=11%16+1=11+1=12
iii=3のとき、
i=(iii+ii)%(n*n)+1=(3+9)%(4×4)+1=12%16+1=12+1=13
iii=4のとき、
i=(iii+ii)%(n*n)+1=(4+9)%(4×4)+1=13%16+1=13+1=14
iii=5のとき、
i=(iii+ii)%(n*n)+1=(5+9)%(4×4)+1=14%16+1=14+1=15
iii=6のとき、
i=(iii+ii)%(n*n)+1=(6+9)%(4×4)+1=15%16+1=15+1=16
iii=7のとき、
i=(iii+ii)%(n*n)+1=(7+9)%(4×4)+1=16%16+1=0+1=1
iii=8のとき、
i=(iii+ii)%(n*n)+1=(8+9)%(4×4)+1=17%16+1=1+1=2
iii=9のとき、
i=(iii+ii)%(n*n)+1=(9+9)%(4×4)+1=18%16+1=2+1=3
iii=10のとき、
i=(iii+ii)%(n*n)+1=(10+9)%(4×4)+1=19%16+1=3+1=4
iii=11のとき、
i=(iii+ii)%(n*n)+1=(11+9)%(4×4)+1=20%16+1=4+1=5
iii=12のとき、
i=(iii+ii)%(n*n)+1=(12+9)%(4×4)+1=21%16+1=5+1=6
iii=13のとき、
i=(iii+ii)%(n*n)+1=(13+9)%(4×4)+1=22%16+1=6+1=7
iii=14のとき、
i=(iii+ii)%(n*n)+1=(14+9)%(4×4)+1=23%16+1=7+1=8
iii=15のとき、
i=(iii+ii)%(n*n)+1=(15+9)%(4×4)+1=24%16+1=8+1=9
iii=16のとき、
i=(iii+ii)%(n*n)+1=(16+9)%(4×4)+1=25%16+1=9+1=10
どうです。
11,12,13,14,15,16,1,2,3,4,5,6,7,8,9,10
と見事に巡回していますよね。
皆さんは、他の数字でもトレースしてみましょう。
どの数字でも、5次魔方陣でも6次魔方陣でも、
循環しますよ。
これでかなり速くなるだろと・・・
実験すると?!