• 1636:【例 6】计算器


    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    ll T,K;ll y,z,p;
    void solve1()
    {
        ll ans=1;
        while(z)
        {
            if(z&1) ans=ans*y%p;
            y=y*y%p;
            z>>=1;
        }
        printf("%lld
    ",ans);
    }
    void exgcd(ll a,ll b,ll &d,ll &x,ll &y0)
    {
        if(!b)
        {
            d=a;
            x=1;
            y0=0;
        }
        else
        {
            exgcd(b,a%b,d,x,y0);
            ll t=x;
            x=y0;
            y0=t-a/b*y0;
        }
    }
    ll gcdd(ll x,ll y0)
    {
        if(y0==0)
        return x;
        return gcdd(y0,x%y0);
    }
    void solve2()
    {
        ll d,x,y0;
        exgcd(y,p,d,x,y0);
        if(z%d!=0) 
        {
            printf("Orz, I cannot find x!
    ");
            return ;
        }
        printf("%lld
    ",((z/d*x)%(p/d)+p/d)%(p/d));
    }
    map<ll,ll>Map;
    void solve3()
    {
        ll d=1,x,y0,gcd,dd;
        Map.clear();
        y%=p;
        //z%=p;
        dd=gcdd(y,p);
        if(dd!=1) {    printf("Orz, I cannot find x!
    ");return ;}
        ll m=ceil(sqrt(p)),tmp=1;
        Map[1]=m+1;
        for(ll i=1;i<m;i++)
        {
            tmp=tmp*y%p;
            if(!Map[tmp]) Map[tmp]=i;
        }
        tmp=tmp*y%p;
        for(ll j=0;j<m;j++)
        {
            exgcd(d,p,gcd,x,y0);
            x=((x*z/gcd)%(p/gcd)+p/gcd)%(p/gcd);
            int t=Map[x];
            if(t)
            {
                if(t==m+1) t=0;
                printf("%lld
    ",j*m+t);
                return;
            }
            d=d*tmp%p;
        }
        printf("Orz, I cannot find x!
    ");
    }
    int main()
    {
        scanf("%lld%lld",&T,&K);
        while(T--)
        {
            scanf("%lld%lld%lld",&y,&z,&p);
            if(K==1) solve1();
            else if(K==2) solve2();
            else solve3();
        }
        return 0;
    }

    这道题只要用朴素算法的bsgs就行了,数据中的情况都是基本情况没有变形但是要注意加一个判断语句

  • 相关阅读:
    iOS网络开发之AFNetworking
    TCP/IP、Http、Socket的区别
    iOS开发
    iOS 10相关技术
    HTTP协议详解
    HTTPS和HTTP的区别
    CocoaPods
    关于 iOS 10 中 ATS 的问题
    Run Loop详解
    iOS开发项目之MVC与MVVM
  • 原文地址:https://www.cnblogs.com/smartljy/p/11405141.html
Copyright © 2020-2023  润新知