都是BSGS的板子题

此时 \( 0 \leq x \leq p-1 \)

设 \( m=\left \lceil \sqrt{p} \right \rceil ,x=i*m-j \)这里-的作用是避免逆元

于是可以把式子变形成这样:\( a^{im}\equiv ba^j(mod\ p) \)

枚举右边\( 0 \leq j <m \) ,用map或者hash以模数为下标来存每一个j

枚举左边\( 0 \leq i <m \) ,在map或者hash中查找对应的模数

#include<iostream>
#include<cstdio>
#include<map>
#include<cmath>
using namespace std;
long long a,b,p;
map<long long,long long>mp;
long long ksm(long long a,long long b,long long p)
{
long long r=1ll;
a%=p;
while(b)
{
if(b&1)
r=r*a%p;
a=a*a%p;
b>>=1;
}
return r;
}
int main()
{
while(~scanf("%lld%lld%lld",&p,&a,&b))
{
a%=p;
if(!a&&!b)
{
puts("1");
continue;
}
if(!a)
{
puts("no solution");
continue;
}
if(b==1)
{
puts("0");
continue;
}
mp.clear();
int m=ceil(sqrt(p)),t=b,f=0;
for(int i=0;i<m;i++)
{
mp[t]=i;
t=(long long)t*a%p;
}
int g=ksm(a,m,p);
t=(long long)g%p;
for(int i=1;i<=m+1;i++)
{
if(mp.count(t))
{
f=1;
printf("%lld\n",i*m-mp[t]);
break;
}
t=(long long)t*g%p;
}
if(!f)
puts("no solution");
}
return 0;
}

最新文章

  1. java在线支付
  2. T-SQL Recipes之Common Function
  3. 《BI深入浅出》笔记
  4. Update-Package : Unable to load the service index for source https://api.nuget.org/v3/index.json.
  5. 基于MVC4+EasyUI的Web开发框架形成之旅--MVC控制器的设计
  6. SpringMVC学习系列(10) 之 异常处理
  7. Python 列表如何获得一个指定元素所在的下标
  8. 关于Unity
  9. oracle中有关用户、角色的一些概念。
  10. sql server2008附加数据库5120错误
  11. ECMA 6 记入
  12. 在Android模拟器中经常出现以下错误 timeout Launch canceled!
  13. Effective C++_笔记_条款06_若不想使用编译器自动生成的函数,就该明确拒绝
  14. JDBC基础学习(三)&mdash;处理BLOB类型数据
  15. Django相关问题
  16. Data Center手册(4):设计
  17. selenium java 浏览器操作
  18. Confluence 6 恢复一个空间
  19. go map的使用
  20. SQL、HQL、JPQL、CQL的对比

热门文章

  1. $.post()用法例子
  2. 转: ORACLE存储过程笔记2----运算符和表达式
  3. Linux 常用但较容易忘记的命令
  4. Go -- 多个go文件包名都是main
  5. mongo开启验证
  6. md5sum使用注意事项
  7. LoadRunner系列实例之— 01录制cas登陆脚本
  8. MySQL 温故而知新--Innodb存储引擎中的锁
  9. PRD编写Axure内直接编辑
  10. 普通用户无法登陆SSH问题