zoukankan      html  css  js  c++  java
  • 【洛谷P5091】【模板】欧拉定理【扩展欧拉定理】

    题目大意:

    题目链接:https://www.luogu.org/problem/P5091
    abmod  ma^bmod m


    思路:

    扩展欧拉定理的模板题。
    具体还不会证明。证明就出门右转题解区吧。
    欧拉定理:对于任意的a,pZa,pin ^*,若满足(a,b)=1(a,b)=1,那么必然就有aφ(m)1(mod p)a^{varphi(m)} equiv 1(mod p)
    扩展欧拉定理:当pφ(m)pgeq varphi(m)时,必有
    apap mod φ(m)+φ(m)(mod p)a^pequiv a^{p mod varphi(m)+varphi(m)}(mod p)
    所以就算出φ(p)varphi(p),然后从高位到低位依次读入bb的每一位,同时取模φ(m)varphi(m)。然后由于最终的指数不会超过10610^6,所以直接暴力乘上去就可以了。
    注意只有在b>φ(m)b>varphi(m)时指数才需要在最后加φ(m)varphi(m)


    代码:

    #include <cstdio>
    using namespace std;
    typedef long long ll;
    
    ll a,b,p,q,phi;
    bool flag;
    
    int main()
    {
    	scanf("%lld%lld",&a,&p);
    	phi=q=p;
    	for (ll i=2;i*i<=q;i++)
    		if (!(q%i))
    		{
    			phi=phi/i*(i-1);
    			while (!(q%i)) q/=i;
    		}
    	if (q>1) phi=phi/q*(q-1);
    	while (scanf("%1lld",&q)==1)
    	{
    		b=b*10+q;
    		if (b>=phi) flag=1;
    		b%=phi;
    	}
    	if (flag) b+=phi;
    	for (ll i=1,x=a;i<b;i++)
    		a=a*x%p;
    	printf("%lld
    ",a);
    	return 0;
    } 
    
  • 相关阅读:
    《入门经典》——8.4
    《A First Course in Probability》-chaper7-期望的性质-期望的性质-协方差
    计算几何讲义——计算几何中的欧拉定理
    Gym
    hdu6053
    ACdream1032(树形DP)
    hdu6040
    hdu6035(树形DP)
    hdu6038
    Codeforces #425 Div2 D
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/11998071.html
Copyright © 2011-2022 走看看