BSGS

Posted huyufeifei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BSGS相关的知识,希望对你有一定的参考价值。

北上广深/拔山盖世算法。

yaT+b = z mod p

p为质数,Hash表存b,枚举a,复杂度p0.5

记得特判y = 0的情况。

技术图片
 1 inline void solve3() {
 2     Hash::clear();
 3     //mp.clear();
 4     scanf("%lld%lld%lld", &Y, &Z, &MO);
 5     Z %= MO;
 6     Y %= MO;
 7     /// BSGS
 8     if(Y == 0) {
 9         if(!Z) printf("1
");
10         else printf("Orz, I cannot find x!
");
11         return;
12     }
13     int T = sqrt(MO);
14     LL x = 1, y = 1;
15     for(int i = 0; i < T; i++) {
16         Hash::insert(x, i);
17         //mp[x] = i;
18         x = x * Y % MO;
19     }
20     x = qpow(x, MO - 2); /// x = 1 / (Y ^ T)
21     for(int i = 0; i <= MO / T; i++) {
22         int t = Hash::find(Z * y % MO);
23         if(t != -1) {
24             printf("%lld
", 1ll * i * T + t);
25             return;
26         }
27         y = y * x % MO;
28     }
29     printf("Orz, I cannot find x!
");
30     return;
31 }
模板

 

以上是关于BSGS的主要内容,如果未能解决你的问题,请参考以下文章

BSGS&EXBSGS 大手拉小手,大步小步走

51Nod1039 N^3 Mod P 数论 原根 BSGS

BSGS及扩展BSGS模板

bsgs BSGS

[bzoj2242][Sdoi2011]计算器_exgcd_BSGS

BZOJ_2242_[SDOI2011]计算器_快速幂+扩展GCD+BSGS