做POJ2154时,对于”置换的循环节的个数为gcd(i, n)"表示疑惑,但是看了很多blog,发现都没有证明这个结论,于是这里做个简单的证明。
设一开始珠子的位置在p点,每次旋转x格。
先证明循环节长度为n / gcd(x, n)。
假设这个珠子走了k次回到p点,那么有
减去p,有
说明了kx是n的倍数,即
又显然有kx是x的倍数
我们发现kx既是n的倍数,又是x的倍数。但是我们求的是循环节长度,即k需要最小,又因为x是常量,那么我们当然取n和x的最小公倍数了
代换一下lcm
消去x,得到k
Q.E.D.
现证明循环节个数是gcd(x, n)
因为循环节的长度为n / gcd(x, n),又一共有n个元素,且这n个元素对称,那么显然循环节个数就是gcd(x, n)。
Q.E.D.