• 51nod 1035 最长的循环节


    正整数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 <= b < a ,a没有2或5的质因数,且a,b互质,那么b/a的循环节数恰好等于 min{e∈N : 10^e ≡ 1(mod a) }。

         b为1,首先剔除a中2和5的质因数,而后枚举e的值,找出最小的e值使得 10^e ≡ 1(mod a) 成立。

    #include<stdio.h>
    #include<queue>
    #include<math.h>
    #include<set>
    #include<string.h>
    #include<string>
    #include<algorithm>
    #include<iostream>
    #include<map>
    using namespace std;
    #define MAXSIZE 100005
    #define LL long long
    #define INF 0x3f3f3f3f
    
    int main()
    {
        int n,maxn = 0,ans=1;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            int temp = i;
            while(temp % 2 == 0)
                temp /= 2;
            while(temp % 5 == 0)
                temp /= 5;
            if(temp == 1)
                continue;
            int len = 0;
            int num = 1;
            while(1)
            {
                num = num*10%temp;
                if(num == 1)
                    break;
                len++;
            }
            if(len > maxn)
            {
                maxn = len;
                ans = i;
            }
        }
        printf("%d
    ",ans);
        return 0;
    }
    View Code



     
  • 相关阅读:
    velocity masterplate 第一个程序的运行
    java 关于集合框架
    java 关于>>>位运算
    QCA wifi驱动强制为HT40
    Linux内核调试方法的总结(转载)
    移动端利用webkitbox水平垂直居中
    Under Construction to Beta
    网站自动备份
    writely 邀请?
    Google Carlendar coming ?
  • 原文地址:https://www.cnblogs.com/alan-W/p/9004215.html
Copyright © 2020-2023  润新知