• 【POJ3696】The Luckiest number


    题意

    给一个正整数L,L ≤2*109.

    至少多少个连在一起的8组成的正整数是L的倍数?

    分析

    随便列举一个一串8组成的数

    88888=8*11111=8*99999/9=8*(105-1)/9

    所以k*L=8/9*(10x-1) 

    设d=gcd(L,8)

    9*k*L/d=8*(10x-1) /d

    观察上面的式子,可发现9*L/d和8/d是没有公因数的

    所以 9*L/d | 10x-1,相当于求 10xΞ1(mod 9*L/d)

    根据欧拉定理的一个推论 满足axΞ1(mod n)的最小x一定是phi(n)的因数

    证明 设phi(n)=qx+y(0<y<x) ,相当于y是余数

    ax Ξaphi(n)Ξaqx+yΞaqxΞ1(mod n)

    所以有 ayΞ1(mod n),而y<x,所以x不是满足axΞ1(mod n)的数,所以x不是phi(n)的因数不能成为满足该式的最小整数

    最后用快速幂检验一下以10为底数, phi(9*L/d)的因子为指数的值%(9*L/d)后是不是1

    乘法防止爆,用快速加代替,因子当中1也要判断

    代码

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    #define N 1010000
    #define ll long long
    ll l,p,cnt,cot,cas,tmp;
    ll v[N],fac[N],prime[N];
    
    ll gcd(ll a,ll b)
    {return b?gcd(b,a%b):a;}
    
    ll ksj(ll a,ll b,ll mod)
    {
        ll ret=0;
        while(b)
        {
            if(b&1)ret=(ret+a)%mod;
            a=(a+a)%mod;
            b>>=1;
        }    
        return ret;
    }
    
    ll ksm(ll a,ll b,ll mod)
    {
        ll ret=1;
        while(b)
        {
            if(b&1)ret=ksj(ret,a,mod);
            a=ksj(a,a,mod);
            b>>=1;
        }    
        return ret;
    }
    
    ll phi(ll n)
    {
        ll ans=n;
        for(ll i=2;i*i<=n;i++)
        {
            if(n%i==0)
            {
                ans=ans/i*(i-1);
                while(n%i==0)n/=i;
            }
        }
        if(n>1)ans=ans/n*(n-1);
        return ans;
    }
    
    ll factors(ll n)
    {
        cot=0;p=tmp;
        for(ll i=1;i*i<=n;i++)
            if(n%i==0)
                fac[++cot]=i,fac[++cot]=n/i;
        sort(fac+1,fac+1+cot);
        for(ll i=1;i<=cot;i++)
            if(ksm(10,fac[i],p)==1)
                return fac[i];
        return 0;
    }
    
    int main()
    {
        while(scanf("%lld",&l)&&l)
        {
            cas++;
            tmp=9*l/gcd(l,8);
            if(gcd(tmp,10)!=1){printf("Case %lld: 0
    ",cas);continue;};
            printf("Case %lld: %lld
    ",cas,factors(phi(tmp)));
        }
    }
    “Make my parents proud,and impress the girl I like.”
  • 相关阅读:
    CSV文件读取类
    一个参数处理类
    记一个mysql的问题
    php问题小记
    wsl开nginx和php-fpm遇到的几个小问题
    debian apache2.4 virtual host 使用
    debian 安装 apache2和php7
    杂记整理三:php、thinkphp和sql
    杂记整理二:linux与程序安装
    杂记整理一:javascript, jQuery 以及 ECMAscript
  • 原文地址:https://www.cnblogs.com/NSD-email0820/p/9753770.html
Copyright © 2020-2023  润新知