Luogu3846 [TJOI2007] 可爱的质数/模板BSGS

Posted gk0328

tags:

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

https://www.luogu.com.cn/problem/P3846

(BSGS)

(BSGS)可以(O( sqrt{p} ))处理:

[b^l equiv n (mod quad p) ]

处理方法十分常规

[令t=sqrt{p}+1设l=kt-m则b^{kt-m} equiv n (mod quad p)^{kt} equiv nb^m (mod quad p)预处理出 nb^m(0 le m<t)用b^{kt} mod p去匹配(map或Hash表)\]

(C++ Code:)

#include<iostream>
#include<cstdio>
#include<cmath>
#include<map>
#define ll long long
using namespace std;
ll p,b,n;
map<ll,int>a;
ll ksm(ll x,ll y)
{
    ll ans=1;
    while (y)
    {
        if (y&1)
            ans=ans*x%p;
        x=x*x%p;
        y >>=1;
    }
    return ans;
}
int main()
{
    scanf("%lld%lld%lld",&p,&b,&n);
    if (n==1)
    {
        printf("0
");
        return 0;
    }
    int g=(int)sqrt(p)+1;
    ll c=n%p;
    for (int i=0;i<g;i++)
    {
        a[c]=i+1;
        c=c*b%p;
    }
    ll y=ksm(b,g);
    ll e=1;
    for (int i=1;i<=g;i++)
    {
        e=e*y%p;
        if (a[e])
        {
            printf("%lld
",(ll)i*g-(ll)(a[e]-1));
            return 0;
        }
    }
    puts("no solution");
    return 0;
}

以上是关于Luogu3846 [TJOI2007] 可爱的质数/模板BSGS的主要内容,如果未能解决你的问题,请参考以下文章

TJOI2007小朋友

二分答案 [TJOI2007]路标设置

[Luogu 3973] TJOI2015 线性代数

[Luogu 4092] HEOI/TJOI2016 树

题解 luogu 3857 [TJOI2008]彩灯 (线性基)

luogu P2825 [HEOI2016/TJOI2016]游戏