指數迴圈節

2021-09-30 12:17:01 字數 2763 閱讀 4538

以上的公式如果第一次見到,難免有不少疑惑:

為什麼可以這麼寫?限制條件為什麼是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 ...