投稿者:山中和義
投稿日:2013年12月 9日(月)10時25分39秒
|
|
|
問題
次の条件をみたす六角形が存在することを示せ。
(1) すべての内角の大きさが120度である。
(2) 辺の長さが、1,2,3,4,5,6の適当な並べ替えである。
考察
多角形なので、辺の並びはじゅず順列で考える。
n-順列から、円順列生成して、裏返しを篩ってじゅず順列とする。
必要条件
z=EXP(2πi/n)=cos(2π/n)+i*sin(2π/n)、iは虚数単位 とする。
これより、z^2-{2cos(2π/n)}z+1=0 ←式1
辺の並びa[1],a[2],a[3],…,a[n]に対して、
多項式 a[1]+a[2]z+a[3]z^2+ … +a[n]z^(n-1) が 式1 で割り切れる。
(終り)
一般的な形で述べると、
nが(s+1)個の相異なる素数(またはどの2つも互いに素な自然数)の積に分解するとき、
辺の長さが1^s, 2^s, …, n^sの並べ替えであるような等角n角形(内角が等しい)が存在する。
n=6=2*3、10=2*5、12=3*4、14=2*7、15=3*5、…
n=14以上は困難である。
OPTION ARITHMETIC COMPLEX !複素平面
PUBLIC NUMERIC n
LET n=6
DIM a(n)
FOR i=1 TO n !最初の並び 1,2,3,…,n
LET a(i)=i
NEXT i
PUBLIC NUMERIC C !場合の数
LET C=0
CALL perm(a,2) !円順列、じゅず順列
PRINT C;"通り"
END
EXTERNAL SUB perm(a(),k) !辞書順序でn-順列(n!通り)を生成する
OPTION ARITHMETIC COMPLEX !複素平面
IF k=n THEN !すべて並んだなら
IF a(2)<a(n) THEN !じゅず順列
CALL stub(a)
END IF
ELSE
FOR i=k TO n
LET t=a(i) !k≦iとして、kからiまでの範囲を右ローテイト
FOR j=i-1 TO k STEP -1
LET a(j+1)=a(j)
NEXT j
LET a(k)=t
CALL perm(a,k+1) !次へ
LET t=a(k) !k≦iとして、kからiまでの範囲を左ローテイトで元に戻す
FOR j=k TO i-1
LET a(j)=a(j+1)
NEXT j
LET a(i)=t
NEXT i
END IF
END SUB
EXTERNAL SUB stub(a())
OPTION ARITHMETIC COMPLEX !複素平面
!z=EXP(2πi/n)として、A[1]+A[2]z+A[3]z^2+A[4]z^3+ … +A[n]z^(n-1)=0かどうか確認する
LET z=EXP(2*PI*COMPLEX(0,1)/n)
DIM P(0 TO n) !多角形の頂点位置を算出する
LET P(0)=0
FOR i=1 TO n
LET P(i)=P(i-1)+a(i)*z^(i-1)
NEXT i
IF ABS(P(n))<1E-12 THEN !題意を満たすなら
LET C=C+1
MAT PRINT a;
SET WINDOW -5,6,-2,9 !n=6
!SET WINDOW -13,11,-1,23 !n=10
CLEAR
DRAW grid
MAT PLOT LINES: P !多角形を描く
WAIT DELAY 2
END IF
END SUB
実行結果
1 4 5 2 3 6
1 5 3 4 2 6
2 通り
|
|
|