日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[51Nod 1035 最长的循环节] 循环小数的性质

發布時間:2023/12/16 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [51Nod 1035 最长的循环节] 循环小数的性质 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[51Nod 1035 最長的循環節] 循環小數的性質

知識點:數論 循環小數の性質 歐拉公式

1. 題目鏈接##

[51Nod 1035 最長的循環節]

2. 題意描述

正整數k的倒數1/k,寫為10進制的小數如果為無限循環小數,則存在一個循環節,求<=n的數中,倒數循環節長度最長的那個數,假如存在多個最優的答案,輸出所有答案中最大的那個數。
1/6= 0.1(6) 循環節長度為1
1/7= 0.(142857) 循環節長度為6
1/9= 0.(1) 循環節長度為1
(10n1000)

3. 解題思路

首先,需要介紹一下循環小數的幾個性質。證明論文《康明昌-循環小數》

  • 循環小數的每個循環節長度為偶數,(記為2k),那么每個循環節中第i1ik個數字 + 第(i+k)個數字之和為9
  • 如果p是質數,并且d1p的循環節的位數,則d可以整除p?1
  • 如果1b<aa沒有2或者5的質因數,并且ab互質,那么ba的循環節位數等于:min{eN:10e1(moda)}
  • 如果1b<aa沒有2或者5的質因數,并且ab互質,那么ba的循環節位數必整除ψ(a)(a);
  • 如果n,m3, 25都不整除mn,并且nm是互質的正整數,則1mn的循環位數是1n1m循環小數位數的最小公倍數;
  • ,其他定理可以參考論文。
  • 在這個題,我們需要用到的結論就是第3條。
    需要特殊處理的是,分母含25的因數。如1235。可以先將25的因數提出來:

    1235=15?47=247?110
    1235的循環位數是跟 247是一樣多的。而 247循環位數也正是 147的循環位數。
    數據比較小,所以暴力枚舉 e<script type="math/tex" id="MathJax-Element-218">e</script>即可。

    4. 實現代碼

    #include <bits/stdc++.h> using namespace std;typedef pair<int, int> PII;const int MAXN = 1000 + 5;int n;int q_pow(int a, int b, int mod) {int ret = 1;while(b > 0) {if(b & 1) ret = ret * a % mod;a = a * a % mod;b >>= 1;}return ret; }int calc(int x) {while((x & 1) == 0) x >>= 1;while(x % 5 == 0) x /= 5;if(x == 1) return 1;int e = 1;while(q_pow(10, e, x) != 1) e ++;return e; }PII ans[MAXN]; void init() {ans[1] = PII(1, 0);for(int i = 2; i < MAXN; i++) {int z = calc(i);if(ans[i - 1].second <= z) ans[i] = PII(i, z);else ans[i] = ans[i - 1];} }int main() { #ifdef ___LOCAL_WONZY___freopen("input.txt", "r", stdin); #endif // ___LOCAL_WONZY___init();while(~scanf("%d", &n)) {printf("%d\n", ans[n].first);}return 0; }

    總結

    以上是生活随笔為你收集整理的[51Nod 1035 最长的循环节] 循环小数的性质的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。