51Nod 1035 最长的循环节

来源:互联网 发布:下载手机app软件 编辑:程序博客网 时间:2024/05/20 01:12
正整数k的倒数1/k,写为10进制的小数如果为无限循环小数,则存在一个循环节,求<=n的数中,倒数循环节长度最长的那个数,假如存在多个最优的答案,输出所有答案中最大的那个数。

1/6= 0.1(6) 循环节长度为1
1/7= 0.(142857) 循环节长度为6
1/9= 0.(1)  循环节长度为1
Input
输入n(10 <= n <= 1000)
Output
输出<=n的数中倒数循环节长度最长的那个数
Input示例
10
Output示例
7

定理1:如果1≤b < a,a沒有2或5的质因数,并且a与b互质,那么b/a的循环节位数恰好等于: min{e∈N: 10^e≡1(moda)}。

证明过程见相关初等数论的书籍。

#include <stdio.h>int main(){    int n,ans,maxx=0;    scanf("%d",&n);    for(int i = 2; i <= n; i++)    {        int m = 10, cnt = 1, a = i;        while(a%2 == 0)              a /= 2;        while(a%5 == 0)              a /= 5;        if(a==1)            cnt = 0;        else{            while(m%a != 1)            {                m = (m*10)%a;                cnt++;            }        }        if(cnt >= maxx){            maxx = cnt;            ans = i;        }    }    printf("%d\n",ans);    return 0;}



0 0
原创粉丝点击