Advertisement
Guest User

Untitled

a guest
Sep 26th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.52 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. vector<int>A;
  4. vector<int>B;
  5. int bin(int x){
  6.     int beg=0,mid=0,en=B.size()-1;
  7.     while(beg+1<en){
  8.         mid=(beg+en)/2;
  9.         if(B[mid]>=x) en=mid;
  10.         else beg=mid;
  11.     }
  12.     return beg+1;
  13. }
  14. int szyb_pot(int a,int b,int p){
  15.     int wyn=1,x=a%p;
  16.     for (int i=1;i<=b;i<<=1){
  17.         x%=p;
  18.         if((b&i)!=0){
  19.             wyn*=x;
  20.             wyn%=p;
  21.         }
  22.         x*=x;
  23.     }
  24.     return wyn;
  25. }
  26. pair<int,int> ExtendedEuclid(int a,int b) {
  27.     if (b == 0) return make_pair(a, 0);
  28.     pair<int,int> p = ExtendedEuclid(b, a % b);
  29.     return make_pair(p.second, p.first - (a / b) * p.second);
  30. }
  31. int main(){
  32.     int a=0,b=0,p=0,wynik=0,temp=0,binik=0,minim=1000000,do_ilu=0;;
  33.     pair<int,int> zmi;
  34.     bool czy=0;
  35.     cin>>a>>b>>p;
  36.     A.push_back(1);
  37.     for(int i=1;i*i<=p;i++){
  38.         temp=szyb_pot(a,i,p);
  39.         //zmi=ExtendedEuclid(temp,p);
  40.         //if(zmi.first<0) zmi.first+=p;
  41.         A.push_back(temp);
  42.         do_ilu=i;
  43.     }
  44.     A.push_back(1);
  45.     for(int i=1;i<=do_ilu;i++){
  46.         temp=szyb_pot(A[do_ilu],i,p);
  47.         B.push_back(temp);
  48.     }
  49.     for(int i=0;i<=do_ilu;i++){
  50.         zmi=ExtendedEuclid(A[i],p);
  51.         if(zmi.first<0) zmi.first+=p;;
  52.         binik=bin(zmi.first*b%p);
  53.         if(B[binik]!=zmi.first*b%p) continue;
  54.         if(binik*do_ilu+i<minim and B[binik]==zmi.first*b%p){
  55.             minim=i+binik*do_ilu;
  56.             czy=1;
  57.         }    
  58.     }
  59.     if(czy==1) cout<<minim;
  60.     else cout<<"NIE";
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement