日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bsgs整理

發布時間:2023/12/20 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bsgs整理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • bsgs問題 或 poj2417:
  • 概述
  • 代碼
  • exbsgs
  • 鳴謝 \(gzy gzy gzy\)

bsgs問題 或 poj2417:

給定質數\(p\),給定\(a\),\(b\),\((a,p)=1\)
求出最小的整數x,使得\(a^{x}≡b(mod p)\)

概述

由費馬小定理可以知道
\(a^{x+p-1}≡a^{x}≡b(mod p)\)
所以如果有解那\([0,p-1]\)區間內一定會出現解
\(m=sqrt(p)\)
\(x\)可以表示為\(m*i-j\)
\(m,i,j\)都是在根號規模的
\(a^{m*i-j}≡b(mod p)\)
\(\frac{a^{m*i}}{a^{j}}≡b(mod p)\)
\(a^{m*i}≡b*a^{j}(mod p)\)
右邊\(hash\)表(一般都用stl的map)存在所有的j取值
左邊暴力枚舉i(因為是-j,所以從1枚舉,要不然就成負數了,找出來的就不一定是最小解)
如果\(a^{m*i}\)在hash表中存在,那就有解,也是最小解,結束吧
如果根號范圍內還沒有解,那就真的沒解
算法思想:分塊
算法缺陷:p是質數
算法復雜度\(\sqrt{n}\)
\(map\)常數也許很高

代碼

#include <iostream> #include <cmath> #include <map> #include <cstdio> #define ll long long using namespace std; ll a,b,p; map<ll,ll> hasH; int main() {while(scanf("%lld%lld%lld",&p,&a,&b)!=EOF) {ll m=floor(sqrt(p));hasH.clear();ll tmp=1;hasH[b]=1;for(ll i=1;i<=m;++i) tmp=tmp*a%p,hasH[tmp*b%p]=i+1;ll xx=tmp,i=1,ans=-1;for(;i<=m;++i) {if(hasH[xx]) {ans=m*i%p-(hasH[xx]-1);break;}xx=xx*tmp%p;}if(ans==-1) puts("no solution");else printf("%d\n",ans);}return 0; }

exbsgs

咕咕咕咕

鳴謝 \(gzy gzy gzy\)

轉載于:https://www.cnblogs.com/dsrdsr/p/10352136.html

總結

以上是生活随笔為你收集整理的bsgs整理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。