给a^x == b (mod c)求满足的最小正整数x,

用BSGS求,令m=ceil(sqrt(m)),x=im-j,那么a(i*m)=b*aj%p;,

我们先枚举j求出所有的b
aj%p,1<=j<m复杂度O(sqrt(c)),然后枚举1<=i<=m,求出a(im)在ba^j找满足条件的答案,最后的答案就是第一个满足条件的i*m-j,复杂度O(sqrt(c))

//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("unroll-loops")
#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<iomanip>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define ll long long
#define vi vector<int>
#define mod 1000000007
#define C 0.5772156649
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define pil pair<int,ll>
#define pli pair<ll,int>
#define pii pair<int,int>
#define cd complex<double>
#define ull unsigned long long
#define base 1000000000000000000
#define fio ios::sync_with_stdio(false);cin.tie(0) using namespace std; const double eps=1e-6;
const int N=1000000+10,maxn=5000+10,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f; map<ll,ll>ma;
inline ll quick(ll a,ll b,ll p)
{
ll ans=1;
while(b)
{
if(b&1)ans=ans*a%p;
a=a*a%p;b>>=1;
}
return ans;
}
int main()
{
ll p,a,b;
while(~scanf("%lld%lld%lld",&p,&a,&b))
{
if(a%p==0)
{
puts("no solution");
continue;
}
ma.clear();
ll m=ceil(sqrt(p));
ll now=b%p;
ma[now]=0;
for(int i=1;i<=m;i++)
{
now=(now*a)%p;
ma[now]=i;
}
ll ans=-1,t=quick(a,m,p);now=1;
for(int i=1;i<=m;i++)
{
now=now*t%p;
if(ma[now])
{
ans=i*m-ma[now];
break;
}
}
if(ans!=-1)printf("%lld\n",(ans%p+p)%p);
else puts("no solution");
}
return 0;
}
/******************** ********************/

最新文章

  1. Redis3 本地安装集群的记录
  2. Mac iTerm 很好用的终端
  3. 【iCore3 双核心板】【发布基于 iCore3的显示模块(包含7寸屏,4.3寸屏,vga模块等】
  4. Mysql备份系列(4)--lvm-snapshot备份mysql数据(全量+增量)操作记录
  5. 树分治 点分治poj 2114
  6. u-boot移植总结(三)(转)S3C2440对Nand Flash操作和电路原理(基于K9F2G08U0A)
  7. js常用方法收集
  8. SharedPreferences实现记住密码功能
  9. pointcut 表达式的含义
  10. BYTE、WORD与DWORD类型
  11. php解决下单、抽奖并发导致的库存负数的问题
  12. javascript权威指南第6版学习笔记
  13. iOS开发——打开手机相册,获取图片
  14. 安卓和 java 学习笔记
  15. 自动红眼移除算法 附c++完整代码
  16. Google浏览器——AxureRP_for_chorme_0_6_2添加
  17. Chinese Mahjong UVA - 11210 (DFS)
  18. CF1101F Trucks and Cities
  19. js根据银行卡号进行判断属于哪个银行并返回银行卡类型
  20. WorkerMan源码分析(resetStd方法,PHP中STDIN, STDOUT, STDERR的重定向)

热门文章

  1. python 练习用python六剑客实现一个统计数字的个数,六剑客:(map、lambda、reduce、filter、切片、推到列表)
  2. IEEE发布2017年编程语言排行榜:Python高居首位,java第三,php第八
  3. 【运维技术】Maven + Gogs + Nexus 实现版本管理 + 代码模块开发管理
  4. Python入门之logging日志模块以及多进程日志
  5. 一篇关于Redis的好文章
  6. PHP 开发 api 接口安全验证
  7. bzoj 1179 [APIO 2009]Atm(APIO水题) - Tarjan - spfa
  8. noip2010 真题练习 2017.2.18
  9. java使用itex读取pdf,并搜索关键字,为其盖章
  10. tslib移植笔记(1)【转】