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的主要内容,如果未能解决你的问题,请参考以下文章