1. 程式人生 > >斐波那契迴圈節的一種求法

斐波那契迴圈節的一種求法

原連結


題意

f ( f ( n ) ) m

o d    p , n 1 0 100
f(f(n))\mod p,n\leq 10^{100}


迴圈節問題

g ( n ) g(n)

n)表示 m o d    n \mod n 意義下斐波那契數列的迴圈節長度。

設模數 n = i = 1 m p i k i n=\prod\limits_{i=1}^mp_i^{k_i} ,則:
g ( n ) = l c m ( g ( p 1 k 1 ) , g ( p 2 k 2 ) , . . . , g ( p m k m ) ) g(n)=lcm(g(p_1^{k_1}),g(p_2^{k_2}),...,g(p_m^{k_m}))

g ( p k ) = g ( p ) p k 1 g(p^k)=g(p)*p^{k-1}
( g g 均指最小迴圈節長度)

對於 g ( p ) g(p) 又有以下定理:

如果5是模 p p 的二次剩餘那麼迴圈節的長度是 p 1 p−1 的因子否則長度為 2 ( p + 1 ) 2(p+1)
對於小於等於5的素數特殊判斷, g ( 2 ) = 3 , g ( 3 ) = 8 , g ( 5 ) = 20 g(2)=3,g(3)=8,g(5)=20

(證明先咕了)
所以算出兩個二次剩餘之後矩乘即可。


程式碼

程式碼也咕了。