大步小步模板

(hash稍微有一点麻烦, poj不支持C++11略坑)

#include <iostream>
#include <vector>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <map>
#define pb push_back
#define fi first
#define se second
#define mk make_pair
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
LL A, B, P, phi, T;
const int MOD = 1e6+; vector<PII> H[MOD+];
LL qpow(LL a, LL b, LL P){
LL ans = ; for(; b; b >>= , (a*=a)%=P) if(b&) (ans*=a)%=P; return ans;
} inline void Hinsert(LL x, int v){ H[x%MOD].pb(mk(x, v)); }
inline void Herase(LL x) { H[x%MOD].clear(); }
inline int Hfind(LL x){
int u = x%MOD;
for(int i = ; i < H[u].size(); i++) if(H[u][i].fi == x) return H[u][i].se;
return ;
} int main()
{
while(scanf("%lld %lld %lld", &P, &A, &B) != EOF){
phi = P-;
T = sqrt(phi+0.5);
int i;
LL At = A, AA;
for(i = ; i <= T; Hinsert(At*B%P, i), i++, (At*=A)%=P);
AA = qpow(A, T, P); At = AA;
for(i = ; i*T <= P && !Hfind(At); i++, (At*=AA)%=P); //<=P 恰好可以覆盖0~P-1这些情况
if(Hfind(At)){ printf("%lld\n", i*T - Hfind(At)); }
else printf("no solution\n");
for(At = A, i = ; i <= T; Herase(At*B%P), i++, (At*=A)%=P);
}
}

最新文章

  1. 在WPF程序中打开网页:使用代理服务器并可进行JS交互
  2. JavaScriptCore 使用
  3. 构建angular项目
  4. 第5章 jQuery对表单、表格的操作及更多应用
  5. iOS 使用SDwebImage缓存图片并在断网时候显示
  6. ABAP RFC远程调用
  7. .net 常用正则表达式
  8. position绝对剧中
  9. SPOJDIVCNT2: Counting Divisors(莫比乌斯反演)
  10. [Windows Phone]常用类库&amp;API推荐
  11. 201521123067 《Java程序设计》第2周学习总结
  12. MicroPython开发之物联网快速开发板
  13. 基于线程池的多线程售票demo(原创)
  14. 链表实现python list数据类型
  15. 2017沈阳站 Tree
  16. Java语法之反射
  17. autocomplate 学习
  18. 循环神经网络-LSTM进阶
  19. MVC使用jQuery.ajax()删除数据
  20. oracle 判断字符串是否包含指定内容

热门文章

  1. web pack
  2. mybatis报错:sql中有条件语句时出现属性没有getter的异常
  3. python__标准库 : urllib2
  4. Could not obtain transaction-synchronized Session for current thread 错误的解决方法!
  5. QP之QEP原理
  6. JavaScript之DOM查询
  7. Qt5 调试之详细日志文件输出(qInstallMessageHandler)
  8. CAS解扰小结
  9. Altera Stratix IV 命名规则
  10. Uniy 组件式泛型单例模式