zoukankan      html  css  js  c++  java
  • 【bzoj2242】计算器

     1 #include<bits/stdc++.h>
     2 #define inf 1000000000
     3 using namespace std;
     4 typedef long long ll;
     5 int gcd(int a,int b){return b==0?a:gcd(b,a%b);}
     6 void exgcd(int a,int b,int &x,int &y){
     7     if(b==0){x=1;y=0;return;}
     8     exgcd(b,a%b,x,y);
     9     int t=x;x=y;y=t-a/b*y;
    10 }
    11 int solve1(ll y,int z,int p){
    12     y%=p;ll ans=1;
    13     for(int i=z;i;i>>=1,y=y*y%p)if(i&1)ans=ans*y%p;
    14     return ans;
    15 }
    16 void solve2(ll y,int z,int p){
    17     p=-p;int t=gcd(y,p);
    18     if(z%t){puts("Orz, I cannot find x!");return;}
    19     y/=t;z/=t;p/=t;int a,b;exgcd(y,p,a,b);
    20     a=1LL*a*z%p;while(a<0)a+=p;
    21     printf("%d
    ",a);
    22 }
    23 map<int,int>mp;
    24 void solve3(int y,int z,int p){
    25     y%=p;if(!y&&!z){puts("-1");return;}
    26     if(!y){puts("Orz, I cannot find x!");return;}
    27     mp.clear();
    28     ll m=ceil(sqrt(p)),t=1;
    29     mp[1]=m+1;
    30     for(ll i=1;i<m;i++){t=t*y%p;if(!mp[t])mp[t]=i;}
    31     ll tmp=solve1(y,p-m-1,p),ine=1;
    32     for(ll k=0;k<m;k++){
    33         int i=mp[z*ine%p];
    34         if(i){
    35             if(i==m+1)i=0;
    36             printf("%lld
    ",k*m+i);return;
    37         }
    38         ine=ine*tmp%p;
    39     }
    40     puts("Orz, I cannot find x!");
    41 }
    42 inline int read(){
    43     int f=1,x=0;char ch;
    44     do{ch=getchar();if(ch=='-')f=-1;}while(ch<'0'||ch>'9');
    45     do{x=x*10+ch-'0';ch=getchar();}while(ch>='0'&&ch<='9');
    46     return f*x;
    47 }
    48 int main(){
    49     int T=read(),k=read();
    50     while(T--){
    51         int y=read(),z=read(),p=read();
    52         if(k==1)printf("%d
    ",solve1(y,z,p));
    53         else if(k==2)solve2(y,z,p);
    54         else solve3(y,z,p);
    55     }
    56     return 0;
    57 }

    奇奇怪怪的bsgs裸题。

    不知道啥是bsgs的可以百度。

    别名 拔山盖世算法,百事公司算法等。

  • 相关阅读:
    spring声明式事务
    spring的传播行为和隔离级别
    索引(index)
    存储过程(转)
    Java中ArrayList相关的5道面试题
    记CVTE2014年春季招聘实习生求职历程
    Java中String,StringBuffer,StringBuilder的区别及其使用
    Linux下C程序的编译,运行,及调试
    skynet源码分析之skynet_server
    skynet源码分析之skynet_module
  • 原文地址:https://www.cnblogs.com/zcysky/p/6882640.html
Copyright © 2011-2022 走看看