上次在 模n的Fibonacci的快速计算 里算出了二维的Fibonacci矩阵除了p = 5 p=5 p = 5 的情况,阶是p 2 − 1 p^2-1 p 2 − 1 ;三维的"3-Fibonacci"矩阵在p = e p=e p = e (这是题目给的参数,不是自然常数)下的阶是e 2 − 1 e^2-1 e 2 − 1 ,但p p p 是其他值是不一定是p 2 − 1 p^2-1 p 2 − 1 。
赛后尝试了一下,用随机矩阵统计了一下,发现了一个神奇的规律:
n
阶(自乘多少次变I I I )
2
p ( p − 1 ) ( p + 1 ) p(p-1)(p+1) p ( p − 1 ) ( p + 1 )
3
p ( p − 1 ) ( p + 1 ) ( p 2 + p + 1 ) p(p-1)(p+1)(p^2+p+1) p ( p − 1 ) ( p + 1 ) ( p 2 + p + 1 )
4
p ( p − 1 ) ( p + 1 ) ( p 2 + p + 1 ) ( p 2 + 1 ) p(p-1)(p+1)(p^2+p+1)(p^2+1) p ( p − 1 ) ( p + 1 ) ( p 2 + p + 1 ) ( p 2 + 1 )
5
p ( p − 1 ) ( p + 1 ) ( p 2 + p + 1 ) ( p 2 + 1 ) ( p 4 + p 3 + p 2 + p + 1 ) p(p-1)(p+1)(p^2+p+1)(p^2+1)(p^4+p^3+p^2+p+1) p ( p − 1 ) ( p + 1 ) ( p 2 + p + 1 ) ( p 2 + 1 ) ( p 4 + p 3 + p 2 + p + 1 )
6
p ( p − 1 ) ( p + 1 ) ( p 2 + p + 1 ) ( p 2 + 1 ) ( p 4 + p 3 + p 2 + p + 1 ) ( p 2 − p + 1 ) p(p-1)(p+1)(p^2+p+1)(p^2+1)(p^4+p^3+p^2+p+1)(p^2-p+1) p ( p − 1 ) ( p + 1 ) ( p 2 + p + 1 ) ( p 2 + 1 ) ( p 4 + p 3 + p 2 + p + 1 ) ( p 2 − p + 1 )
…
. . . . . . ...\ ... ... ...
可以看出n i + 1 n_{i+1} n i + 1 项其实就是在n i n_i n i 项上乘上一个多项式,这些多项式可以组成一个数列,如果把这个数列记为P P P 的话,就是:
P i P_i P i
值
P 0 P_0 P 0
p p p ??
P 1 P_1 P 1
( p − 1 ) (p-1) ( p − 1 )
P 2 P_2 P 2
( p + 1 ) (p+1) ( p + 1 )
P 3 P_3 P 3
( p 2 + p + 1 ) (p^2+p+1) ( p 2 + p + 1 )
P 4 P_4 P 4
( p 2 + 1 ) (p^2+1) ( p 2 + 1 )
P 5 P_5 P 5
( p 4 + p 3 + p 2 + p + 1 ) (p^4+p^3+p^2+p+1) ( p 4 + p 3 + p 2 + p + 1 )
P 6 P_6 P 6
( p 2 − p + 1 ) (p^2-p+1) ( p 2 − p + 1 )
…
. . . . . . ...\ ... ... ...
总结一下性质,以及这个数列是怎么生成的:
P 0 = p P_0=p P 0 = p 且 P 1 = p − 1 P_1=p-1 P 1 = p − 1 ;
如果q q q 是素数的话,有P q = ∑ i = 0 q − 1 p i P_q=\sum_{i=0}^{q-1}p^i P q = ∑ i = 0 q − 1 p i ;
P a 2 = p a ∗ b − 1 P 1 ∗ P a P_{a^2}=\frac{p^{a*b}-1}{P_1*P_a} P a 2 = P 1 ∗ P a p a ∗ b − 1 ;
P a ∗ b = p a ∗ b − 1 P 1 ∗ P a ∗ P b P_{a*b}=\frac{p^{a*b}-1}{P_1*P_a*P_b} P a ∗ b = P 1 ∗ P a ∗ P b p a ∗ b − 1 , a ≠ b a \ne b a = b
所以如果M M M 是一个n ∗ n n*n n ∗ n 的非奇异矩阵(即行列式不为0)、p p p 是奇素数的话,就(可能)会有:
M n ∗ n ∏ i = 0 n P i = I n ∗ n ( m o d p ) M_{n*n}^{\prod_{i=0}^{n}P_i} = I_{n*n} \ (mod\ p)
M n ∗ n ∏ i = 0 n P i = I n ∗ n ( m o d p )
这个是当时的猜想1 ,附上一段验证的代码(其实猜的大部分是对的,但还是有些代码里没考虑到的小细节错了):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 var('x' ) def getOrderX (n ): P = [x, x-1 ] for i in range (2 , n+1 ): if is_prime(i): P.append(sum ([x^j for j in range (i)])) else : for j in range (2 , i): if i%j==0 : if j^2 ==i: P.append((x^i-1 )/(P[1 ]*P[j])) else : P.append((x^i-1 )/(P[1 ]*P[j]*P[i//j])) break return P def getOrder (p, n ): return int (product(getOrderX(n)).expand()(x=p)) def randMp (p, n ): while True : mt = matrix(IntegerModRing(p), [[randrange(p) for _ in range (n)] for _ in range (n)]) if mt.det()!=0 : return mt if __name__ == '__main__' : fail = 0 for i in range (10 ): n = randint(2 , 100 ) while True : p = random_prime(100000 ) if p > 1 : break I = identity_matrix(IntegerModRing(p), n) order = getOrder(p, n) yes = True for _ in range (10 ): m = randMp(p, n) if pow (m, order)==I: continue else : print ('%s\t%s\tfail' % (p, n)) print (pow (m, order)) fail += 1 yes = False break if yes: print ('%s\t%s\tyes' % (p, n)) print ('------' ) print ('done!' ) print ('fail: %s' % fail)
捣鼓一下,其实还有另一个猜想:当时统计了一下,发现其实∏ i = 0 n P i \prod_{i=0}^{n}P_i ∏ i = 0 n P i 是一个很松的界,实际测试(枚举小n n n 和小p p p 下的全部非奇异矩阵)的话是没有试过能到达这个阶的,而实际能达到的最大阶是:
∏ d ∣ n ϕ d ( p ) = p n − 1 \prod_{d|n}\phi_d(p) = p^n-1
d ∣ n ∏ ϕ d ( p ) = p n − 1
记这个作猜想2 吧(名字好像不重要:)
上面说的其实是一个星期前的内容了,根据这几天搜集到的资料,发现其实有更多可以完善的地方,比如:
上面说的“模p非奇异矩阵的群”其实就是在F p \mathbb{F}_p F p 上的一般线性群(general linear group over F p \mathbb{F}_p F p ),通常记作G L ( n , F p ) GL(n, \mathbb{F}_p) G L ( n , F p ) ,其中n n n 是方阵的维度,F p \mathbb{F}_p F p 是指矩阵元素在域F p \mathbb{F}_p F p 上(当然也可以在其他域上,不过就是另外的内容了);
上面说的数列P P P 除了第0项其实是叫分圆多项式(cyclotomic polynomial ),通常把它的第i i i 项写作ϕ i ( p ) \phi_i(p) ϕ i ( p ) ,但那四点性质还是适用的;
网上拿“GL(n,p)”作关键字搜了一堆后,最终在这里 找到“简单”的证明,还有一篇论文[1],然后有以下结论:
猜想2是对的,而且论坛的回复里一句话就证了:
大概意思是,计算A A A 的特征值时,∣ A − λ I ∣ |A-\lambda I| ∣ A − λ I ∣ 计算出来的多项式最多有n n n 项,除去全零项的话即最多p n − 1 p^n-1 p n − 1 种(然后后面怎么扯上G L ( n , F p ) GL(n, \mathbb{F}_p) G L ( n , F p ) 的还没搞懂,)
根据[1]的Theorem1,
在F p \mathbb{F}_p F p 上,其实就是m = 1 m=1 m = 1 ,即有:
q n = L C M ( p − 1 , p 2 − 1 , . . . , p n − 1 ) q_n=LCM(p-1, p^2-1, ..., p^n-1)
q n = L CM ( p − 1 , p 2 − 1 , ... , p n − 1 )
实际上可以把分圆多项式代进去化简,即:
q n = L C M ( ∏ d ∣ 1 ϕ d ( p ) , ∏ d ∣ 2 ϕ d ( p ) , . . . , ∏ d ∣ n ϕ d ( p ) ) = ∏ i = 1 n ϕ i ( p ) q_n = LCM(\prod_{d|1}\phi_d(p), \prod_{d|2}\phi_d(p), ...,\prod_{d|n}\phi_d(p) ) = \prod_{i=1}^{n}\phi_i(p)
q n = L CM ( d ∣1 ∏ ϕ d ( p ) , d ∣2 ∏ ϕ d ( p ) , ... , d ∣ n ∏ ϕ d ( p )) = i = 1 ∏ n ϕ i ( p )
在猜想1中,这一半是没问题的,有一个小细节问题是p r p^r p r ,论文的要求是p r ≥ n > p r − 1 p^r \ge n > p^{r-1} p r ≥ n > p r − 1 ,而我的n n n 是在randint(2, 100)
中选的,p p p 是在random_prime(100000)
中选的,即大概率是p 1 ≥ n > p 0 p^1 \ge n > p^0 p 1 ≥ n > p 0 ,也即r r r 大概率会是1 1 1
另外扩展一下,符合G L ( n , F p ) GL(n, \mathbb{F}_p) G L ( n , F p ) 的元素个数,即元素在F p \mathbb{F}_p F p 上的n n n 维非奇异矩阵的个数是:
∏ i = 0 n − 1 ( p n − p i ) = ∏ i = 0 n − 1 p i ( p n − i − 1 ) \prod_{i=0}^{n-1}(p^n-p^i) = \prod_{i=0}^{n-1}p^i(p^{n-i}-1)
i = 0 ∏ n − 1 ( p n − p i ) = i = 0 ∏ n − 1 p i ( p n − i − 1 )
即其实上面的p r q n p^rq_n p r q n 包含了这个式子的所有因子
总结以上,最后的结论是 :
设 ϕ i \phi_i ϕ i 为分圆多项式的第i i i 项、G L ( n , F p ) GL(n, \mathbb{F}_p) G L ( n , F p ) 是域 F p \mathbb{F}_p F p 上的一般线性群、A ∈ G L n ( F p ) A \in GL_n(\mathbb{F}_p) A ∈ G L n ( F p ) 、I I I 是G L ( n , F p ) GL(n, \mathbb{F}_p) G L ( n , F p ) 单位元,则有:
A p r ∏ i = 1 n ϕ i ( p ) ≡ I ( i n G L n ( Z p ) ) A^{p^r\prod_{i=1}^{n}\phi_i(p)} \equiv I \ \ (in\ GL_n(\mathbb{Z}_p))
A p r ∏ i = 1 n ϕ i ( p ) ≡ I ( in G L n ( Z p ))
其中p r ≥ n > p r − 1 p^r \ge n > p^{r-1} p r ≥ n > p r − 1 ;实际上,G L ( n , F p ) GL(n, \mathbb{F}_p) G L ( n , F p ) 中元素的最大阶只能到:
∏ d ∣ n ϕ d ( p ) = p n − 1 \prod_{d|n}\phi_d(p) = p^n-1
d ∣ n ∏ ϕ d ( p ) = p n − 1
在翻资料的时候“好像”瞄到了有求G L ( n , F p ) GL(n, \mathbb{F}_p) G L ( n , F p ) 特征值然后分解的,看看能不能再水一篇(逃
当初线性代数没学好啊… …
当初抽象代数也没学好啊… …
[1] Ivan Niven, Fermat theorem for matrices, Duke Math. J. 15 (1948), 823-826