以上的公式如果第一次見到,難免有不少疑惑:
為什麼可以這麼寫?限制條件為什麼是x >= phi(c),這個公式為什麼正確?
今天突發奇想,在紙上yy以後得到了以下證明(個人證明,如果有問題歡迎提出)
定理 1:
對於乙個數對(a,c) 必然存在乙個最小的正整數 l,滿足
其中spos 是乙個大於等於0的整數(下面具體介紹)
我們稱l 為(a,c) 的最小迴圈節長度
證明:根據鴿巢原理,得到在x >= c 後必然出現迴圈,從而定理得證.
定理 2:
對於數對 (a,c) 下面的公式必然成立
其中 k >= 0
既l 的任意倍數均為乙個新的迴圈節長度.
證明:根據定理1,不難得證.
定理 3:
對於數對 (a,c) 必然存在 乙個最大的spos >=0 ,滿足
(1) 若x屬於區間 [0,spos -1] 內,得到的乙個剩餘系的長度為spos;
(2) 該剩餘系和x屬於[spos,+oo]的剩餘系的交集為空!
證明:對於乙個spos,由於[0,spos-1]內不存在迴圈,所以x屬於[0,spos-1]內得到的值是唯一的.
而第二點的證明也不難,因為如果不為空,那麼必然可以縮小spos的值.
定理 4:
對於數對 (a,c) 若 (a,c) == 1,那麼 l | phi(c)
證明:顯然可以由尤拉公式,得到
a^phi(c) = 1 (mod c)
而a^0 = 1 (mod c),於是出現了迴圈
由定理2,該定理得證.
定理5:
對於數對 (a,c) 若 a|c
那麼有spos >= cnt
其中cnt為滿足 a^cnt | c的最大的正整數
下面分2個情況
(1) a^cnt == c
果斷顯然成立
(2) a^cnt * b = c
於是我們假設對於[0,cnt] 內存在某個數i,有
a^i = a^x (mod c)
而由於x > cnt (因為[0,cnt]內不存在迴圈) 所以
a^cnt * a^(x - cnt) = a^i (mod a^cnt * b)
顯然如果 i < cnt
那麼是不可能有解的
因為(a^cnt, a^cnt * b) | a^i 顯然不成立
於是spos >= cnt 得證
定理 6:
對於乙個數對 (a,c) 若存在
那麼有 l | m
根據定理1,2 不難得到.
好了,上面寫了那麼多,是為了介紹 迴圈節的基本定理
下面開始正題,開始公式的證明
我們對於a 進行分解,得到素因子集合
下面我們把素因子分為2類
(1) (pi,c) == 1
(2) (pi,c) != 1
對於第一類情況,我們容易由定理4知道對於每乙個 pi,得到了li ( 數對 (pi,c) 的最小迴圈節長) 必然是 phi(c) 的因子
對於第二類情況,由定理5,」消去 因子」,轉化為第一類的情況.得到了 這類的素因子pi 的li 依然為phi(c) 的因子
@2011-01-11 對於第二類情況的更新
由迴圈定義得到
(pi^ci)^x = (pi^ci)^(x + li) (mod c) (x >= spos)
那麼我們假設c = pi^cnt * b, 其中 (b, pi) = 1
那麼
(pi^ci)^x = (pi^ci)^(x + li) (mod pi^cnt * b)
同時消去pi因子,最終可以得到:
[pi^a] * [pi^ci]^b = [pi^a] * [pi^ci]^b * [pi^ (ci * li)] (mod b)
(pi^a, b) = 1,逆元存在,2邊同時乘上 pi^a的逆元
[pi^ci]^b = [pi^ci]^b * [pi^ (ci * li)] (mod b)
===>
[pi^ci] ^b = [pi^ci] ^ (b + li) (mod b)
li 為phi(b)的因子,b為c的因子,既
li | phi(b), b| c
下面我們構造所有素因子的迴圈,既求他們的lcm,那由於定理6不難知道,(a,c) 的最小迴圈節長 l | lcm(l1,l2…lk)
而li |phi(c)
所以 l | phi(c)
之後由定理1,2 公式得證.
推薦題目:
problem 1759 super a^b mod c 直接運用公式
2023年shanghai b,得到dp以後利用公式
calculation 遞迴,注意細節
ps.標程在某個細節處理錯誤,可是資料是對的.
**:
指數迴圈節(降冪)
指數迴圈節 在有些題目中我們需要對指數進行降冪處理才能計算。比如計算 其中這裡由於 給定 include include include using namespace std const int n 1000005 typedef long long ll char str n int phi i...
迴圈節長度以及迴圈節
迴圈節長度 兩個整數做除法,有時會產生迴圈小數,其迴圈部分稱為 迴圈節。比如,11 13 6 0.846153846153 其迴圈節為 846153 共有6位。這是一道藍橋杯的題目,試卷上是乙個填空題,思路就是不斷的對除數取餘,然後乘10後再取餘,直到餘數在之前出現過或者為0 結束。為什麼是這樣的呢...
最長迴圈節
1035 最長的迴圈節 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 正整數k的倒數1 k,寫為10進製的小數如果為無限迴圈小數,則存在乙個迴圈節,求 n的數中,倒數迴圈節長度最長的那個數,假如存在多個最優的答案,輸出所有答案中最大的那個數。1 6 0.1 6 ...