循環節

循環節

如果無限小數的小數點後,從某一位起向右進行到某一位止的一節數字循環出現,首尾銜接,稱這種小數為循環小數,這一節數字稱為循環節. 把循環小數寫成個別項與一個無窮等比數列的和的形式後可以化成一個分數.

長度

對一個大整數求倒數,用牛頓法可以快速達到很高的精度,但需要的空間很大,如果求一個10^300數量級的質數p的倒數,其循環節長度有可能達到p-1,沒有一台計算機的記憶體能夠儲存整個循環節的數據,如果用普通的除法,只需儲存餘數,占用的記憶體不大,可卻可能要計算p-1次,不可能算完,請問有什麼好的方法解決這個問題嗎?只要有循環節的長度就可以,不用輸出循環節的內容

這個問題的另一種描述:給定大整數n(可能是質數也可能是合數,且不知道這個數的分解形式),求最小的k使10^k ≡1 (mod n)

對a^k ≡1 (mod n)

若n與a互素,求分母n的歐拉函式值ψ(n).那么循環節長度k必是ψ(n)的約數.

若n與a有公因子,顯然無解.

根據這個性質,對每個約數試驗就可以了.

ψ(n)的求法:

設n=p1^c1*p2^c2*...*pk^ck;(pi為素數)

那么,ψ(n)=(p1-1)*p1^(c1-1)*(p2-1)*p2^(c2-1)*...*(pk-1)*pk^(ck-1).

因此求ψ(n)與將n因數分解密切相關.

如果n有300位的話,對300位數分解是困難的.

當然,以上只是對a^k ≡1 (mod n)(a為與n互素的任意數)形式來討論的.如果a=2,可能有更好的辦法.

事實上提出這個問題的初衷,是發現大數分解問題可以轉化為求一個大數的倒數的循環節的長度

給定n,在RSA加密中,n肯定是兩個質數的積,設n=p*q,此時1/n的循環節的長度l|gcd(p-1,q-1),

假定知道l的因數分解,l=l(1)^c(1)*l(2)^c(2)*...*l(k)^c(k),則l有∏[c(i)+1]個約數,將這些約數分別加上1,如果某個約數y(j)加一後是質數,則y(j)+1有可能是n的約數,對所有

相關搜尋

熱門詞條

聯絡我們