• 【POJ 3696】 The Luckiest number


    【题目链接】

                http://poj.org/problem?id=3696

    【算法】

               设需要x个8

               那么,这个数可以表示为 : 8(10^x - 1) / 9, 由题, L | 8(10^x - 1) / 9

               令d = gcd(L,8),则 :

               L | 8(10^x - 1) / 9

               9L | 8 (10^x - 1)  ->  9L/d | 10^x-1 -> 10^x(mod (9L/d)) = 1

              易证a^x(mod n) = 1的最小正整数解是phi(n)的一个约数

              那么,求出欧拉函数phi(9L/d),枚举约数,即可

    【代码】

                

    #include <algorithm>  
    #include <bitset>  
    #include <cctype>  
    #include <cerrno>  
    #include <clocale>  
    #include <cmath>  
    #include <complex>  
    #include <cstdio>  
    #include <cstdlib>  
    #include <cstring>  
    #include <ctime>  
    #include <deque>  
    #include <exception>  
    #include <fstream>  
    #include <functional>  
    #include <limits>  
    #include <list>  
    #include <map>  
    #include <iomanip>  
    #include <ios>  
    #include <iosfwd>  
    #include <iostream>  
    #include <istream>  
    #include <ostream>  
    #include <queue>  
    #include <set>  
    #include <sstream>  
    #include <stdexcept>  
    #include <streambuf>  
    #include <string>  
    #include <utility>  
    #include <vector>  
    #include <cwchar>  
    #include <cwctype>  
    #include <stack>  
    #include <limits.h>
    using namespace std;
    typedef long long ll;
    
    int i,cnt,TC;
    ll factor[100010];
    ll d,l,p;
    
    inline ll gcd(ll x,ll y)
    {
            if (y == 0) return x;
            else return gcd(y,x%y);        
    }
    inline ll phi(ll n)
    {
            int i;
            ll ret = n;
            for (i = 2; i <= sqrt(n); i++)
            {
                    if (n % i == 0)
                    {
                            ret = ret / i * (i - 1);
                            while (n % i == 0) n /= i;
                    }
            }        
            if (n > 1) ret = ret / n * (n - 1);
            return ret;
    }
    inline ll mul(ll a,ll b,ll p)
    {
            ll ans = 0;
            while (b)
            {
                    if (b & 1) ans = (ans + a) % p;
                    a = a * 2 % p;
                    b >>= 1;
            }
            return ans;
    }
    inline ll power(ll a,ll n)
    {
            ll b = a,ret = 1;
            while (n > 0)
            {
                    if (n & 1) ret = mul(ret,b,d);
                    b = mul(b,b,d);
                    n >>= 1;    
            }        
            return ret;
    }
    
    int main() 
    {
            
            while (scanf("%lld",&l) != EOF && l)
            {
                    d = 9 * l / gcd(8,l);
                    printf("Case %d: ",++TC);
                    if (gcd(10,d) != 1)
                    {
                            printf("0
    ");
                            continue;        
                    }    else
                    {
                            cnt = 0;
                            p = phi(d);
                            for (i = 1; i <= sqrt(p); i++)
                            {
                                    if (p % i == 0)
                                    {
                                            factor[++cnt] = i;
                                            if (i * i != p) factor[++cnt] = p / i;
                                    }
                            }
                            sort(factor+1,factor+cnt+1);for (i = 1; i <= cnt; i++)
                            {
                                    if (power(10,factor[i]) == 1)
                                    {
                                            printf("%lld
    ",factor[i]);
                                            break;
                                    }
                            }
                    }
            }
            
            return 0;
        
    }
  • 相关阅读:
    [C++] static member variable and static const member variable
    [C++] const inside class VS const outside class
    [C++] OOP
    [C++] Function Template
    [C++] right value reference
    [C++] advanced reference
    [C++] const and char*
    [C++] c Struct VS c++ Struct
    [C++] decltype(auto) C++ 11 feature
    easyui-validatebox 的简单长度验证
  • 原文地址:https://www.cnblogs.com/evenbao/p/9284531.html
Copyright © 2020-2023  润新知