zoukankan      html  css  js  c++  java
  • Mod Tree HDU

    Mod Tree

     HDU - 2815 

     题意:a^x≡n(mod p),求x。

    BSGS模板题~

    需要注意的是n>p时显然无解

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 #define ll long long
     5 const int mod=99991;
     6 ll head[mod],nex[mod];
     7 ll cnt;
     8 ll hs[mod],id[mod];
     9 void init(){
    10     memset(head,-1,sizeof(head));
    11     cnt=0;
    12 }
    13 void insert_(ll x,ll i){
    14     hs[cnt]=x;id[cnt]=i;
    15     ll u=x%mod;
    16     nex[cnt]=head[u];
    17     head[u]=cnt++;
    18 }
    19 ll find_(ll x){
    20     ll u=x%mod;
    21     for(ll i=head[u];~i;i=nex[i]){
    22         if(hs[i]==x) return id[i];
    23     }
    24     return -1;
    25 }
    26 ll gcd(ll a,ll b){
    27     ll r=a%b;
    28     while(r){a=b;b=r;r=a%b;}
    29     return b;
    30 }
    31 //求解a^x≡b(mod c),返回x,无解返回-1
    32 ll BSGS(ll a,ll b,ll c){
    33     a%=c;b%=c;
    34     if(b==1) return 0;
    35     ll g=1,d=1,k=0;
    36     while((g=gcd(a,c))!=1){
    37         if(b%g) return -1;
    38         b/=g;c/=g;
    39         k++;
    40         d=d*(a/g)%c;
    41         if(b==d) return k;
    42     }
    43     ll m=ceil(sqrt(c*1.0)),q=1;
    44     for(ll i=0;i<=m;i++){
    45         if(i==0) insert_(b,i);
    46         else {
    47             q=q*a%c;
    48             insert_(q*b%c,i);
    49         }
    50     }
    51     for(ll i=1;i<=m;i++){
    52         d=d*q%c;
    53         ll j=find_(d);
    54         if(j!=-1) return i*m-j+k;
    55     }
    56     return -1;
    57 }
    58 int main(){
    59     ll k,p,n;
    60     while(scanf("%lld%lld%lld",&k,&p,&n)!=EOF){
    61         init();
    62         ll ans=-1;
    63         if(n<=p) ans=BSGS(k,n,p);
    64         if(ans==-1) puts("Orz,I can’t find D!");
    65         else printf("%lld
    ",ans);
    66     }
    67 }
    View Code
  • 相关阅读:
    铁轨
    POJ 2385 -- Apple Catching
    POJ 3258 -- River Hopscotch
    POJ 1469 -- COURSES (二分匹配)
    POJ 2349 -- Arctic Network
    最小生成树
    NOIP200703守望者的逃离
    NOIP200706字符串的展开
    POJ 1036 -- Gangsters
    POJ 1952 -- BUY LOW, BUY LOWER
  • 原文地址:https://www.cnblogs.com/yijiull/p/7442734.html
Copyright © 2011-2022 走看看