分數化小數 計蒜客(無限迴圈小數 迴圈節 尤拉函式 尤拉定理 十進位制)
阿新 • • 發佈:2019-01-19
分數化小數
題目描述
對於一個分數(不一定是最簡形式),給出它的小數形式,如果小數有迴圈節的話,把迴圈節放在一對圓括號中.
例如,1/4 =0.25
,1/3=0.3333
寫成0.(3)
,1/7= 0.142857142857...
寫成0.(142857)
。如果結果是一種整數xxx
,則用xxx.0
等表示整數xxx
。
輸入包括一行,包括被空格分隔開的分子N和分母D(第一個是N,第二個是D)。
輸出包括一行,為轉換後的小數形式。
輸入樣例
45 56
輸出樣例
0.803(571428)
題目解釋
題目中需要求一個 分數 的小數,如果是無限迴圈小數,則輸出 0.xxx(xxx)
的格式。
因此我們考慮,先求出這個小數的 迴圈起始點(S)
我們舉個栗子。對於 這種情況。
我們考慮先對 即:
然後我們將這些分數的分子進行 操作, 即:
我們可以明顯的發現當操作進行到第 10 次的時候和第 4 次重複了,顯然已經形成了一個長度為 6 的迴圈節,即從第 4 項開始迴圈。
由此我們可以推廣到更一般的情況。假設分數為 ,由於小數部分和整數無關,因此我們可以假設這個分數為真分數。不妨假設。
由上可知,我們可以把第 個分數寫成
因此我們可以假設第 個分數和第 個分數相等,即構成了一個迴圈節。有
兩邊同乘 ,得
即
又可表示為
令,設。即
即
由此可知
因為 和 互質,因此可得。
由於 為偶數,且 為奇數。
顯然 由 和 共同決定,又知 和 的公因數由 和 貢獻。
因此 , 為 中貢獻的 的個數, 為 中貢獻的 的個數。
接下來需要求迴圈節 。
設
經過一番計算,上式 已經變成了
即