• POJ


    ( ext{Solution})

    首先可以把题意转化为求最小的 (x) 使得 (L|8 imes frac{10^x-1}{9})

    然后有 (9 imes L|8 imes (10^x-1))

    我们尝试去掉那个 (8),因为 (gcd(9,8)=gcd(8,10^x-1)=1),所以 (8) 贡献的因子一定只在 (L) 出现,(L) 中关于 (8) 的因子也只在 (8) 出现。就可以转化为 (frac{9 imes L}{gcd(8,L)}|10^x-1)

    显然就有 (10^xequiv 1 (operatorname{mod} frac{9 imes L}{gcd(8,L)})),我们令模数为 (p)

    首先,如果 (gcd(p,10) eq 1) 就一定无解,否则一定有解。令 (gcd(p,10)=g (g eq 1)),则 (p=a imes g,10=b imes g)。显然 (10^x) 一定会是 (g) 的倍数,用 (10^x) 减去若干个 (p)(模拟取模)一定是 (g) 的倍数,不会是 (1)。否则起码有欧拉定理撑着。

    这里有个结论:

    (gcd(a,p)=1),使得 (a^xequiv 1 ( ext{mod }p)) 成立的最小 (x)(phi(p)) 的因数。

    反证法。

    设最小 (x) 满足 (phi(p)=k imes x+m (0<m<x))。(默认在取模 (p) 的情况下)

    那么有 (a^{phi(p)}equiv a^{k imes x+m}equiv 1)

    又因为 (a^xequiv 1),显然 (a^{k imes x}equiv 1)。那么就有 (a^mequiv 1)

    但是 (m<x),所以 (x) 并不是最小的。所以结论得证。

    注:模数较大,要多开 long long,还要加上快速乘。

    ( ext{Code})

    #include <cstdio>
    
    #define rep(i,_l,_r) for(register signed i=(_l),_end=(_r);i<=_end;++i)
    #define fep(i,_l,_r) for(register signed i=(_l),_end=(_r);i>=_end;--i)
    #define erep(i,u) for(signed i=head[u],v=to[i];i;i=nxt[i],v=to[i])
    #define efep(i,u) for(signed i=Head[u],v=to[i];i;i=nxt[i],v=to[i])
    #define print(x,y) write(x),putchar(y)
    
    template <class T> inline T read(const T sample) {
    	T x=0; int f=1; char s;
    	while((s=getchar())>'9'||s<'0') if(s=='-') f=-1;
    	while(s>='0'&&s<='9') x=(x<<1)+(x<<3)+(s^48),s=getchar();
    	return x*f;
    }
    template <class T> inline void write(const T x) {
    	if(x<0) return (void) (putchar('-'),write(-x));
    	if(x>9) write(x/10);
    	putchar(x%10^48);
    }
    template <class T> inline T Max(const T x,const T y) {if(x>y) return x; return y;}
    template <class T> inline T Min(const T x,const T y) {if(x<y) return x; return y;}
    template <class T> inline T fab(const T x) {return x>0?x:-x;}
    template <class T> inline T Gcd(const T x,const T y) {return y?Gcd(y,x%y):x;}
    template <class T> inline T Swap(T &x,T &y) {x^=y^=x^=y;}
    
    typedef long long ll;
    
    const ll inf=(1ll<<60);
    
    ll p;
    
    ll phi(ll x) {
    	ll r=x;
        for(int i=2;i*i<=x;++i) {
        	if(x%i) continue;
            r=r/i*(i-1);
            while(x%i==0) x/=i;
        }
        if(x>1) r=r/x*(x-1);
        return r;
    }
    
    ll gcd(ll x,ll y) {
    	if(!y) return x;
    	return gcd(y,x%y);
    }
    
    ll qkmul(ll x,ll y) {
    	ll r=0;
    	while(y) {
    		if(y&1) r=(r+x)%p;
    		x=(x+x)%p; y>>=1;
    	}
    	return r;
    }
    
    ll qkpow(ll x,ll y) {
    	ll r=1;
    	while(y) {
    		if(y&1) r=qkmul(r,x);
    		x=qkmul(x,x); y>>=1;
    	}
    	return r;
    }
    
    int main() {
    	int T=0,n; ll Phi,ans;
    	while(233) {
    		n=read(9);
    		if(!n) break;
    		p=1ll*n/gcd(n,8)*9;
    		if(gcd(10,p)>1) {printf("Case %d: 0
    ",++T); continue;}
    		Phi=phi(p); ans=inf;
    		for(ll i=1;i*i<=Phi;++i) {
    			if(Phi%i) continue;
    			if(qkpow(10,i)==1&&i<ans) ans=i;
    			if(qkpow(10,Phi/i)==1&&Phi/i<ans) ans=Phi/i;
    		}
    		printf("Case %d: %lld
    ",++T,ans);
    	}
    	return 0;
    }
    
  • 相关阅读:
    Elasticsearch基础总结
    JDK安装配置
    目标跟踪【1】质心跟踪算法
    opencv 快速下载
    keras to_categorical函数one hot 编码
    深度学习 之 模型部署【2】TensorRT 入门
    深度学习 之 模型部署【1】基础入门
    PyTorch 剪枝
    NMS 系列
    图像处理gamma 矫正 及 人脸处理
  • 原文地址:https://www.cnblogs.com/AWhiteWall/p/13604634.html
Copyright © 2020-2023  润新知