Discrete Logging ZOJ - 1898 (模板题大小步算法)
就是求Ax三B(mod C)当C为素数时
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; typedef long long LL; const int MAXINT = ((1 << 30) - 1) * 2 + 1;int A, B, C; struct Hashmap //哈希表代替map {static const int Ha = 999917, maxe = 46340;int E, lnk[Ha], son[maxe + 5], nxt[maxe + 5], w[maxe + 5];int top, stk[maxe + 5];void clear() { E = 0; while (top) lnk[stk[top--]] = 0; }void Add(int x, int y) { son[++E] = y; nxt[E] = lnk[x]; w[E] = MAXINT; lnk[x] = E; }bool count(int y){int x = y%Ha;for (int j = lnk[x]; j; j = nxt[j])if (y == son[j]) return true;return false;}int& operator [] (int y){int x = y%Ha;for (int j = lnk[x]; j; j = nxt[j])if (y == son[j]) return w[j];Add(x, y); stk[++top] = x; return w[E];} }; Hashmap f;int exgcd(int a, int b, int &x, int &y) {if (!b) { x = 1; y = 0; return a; }int r = exgcd(b, a%b, x, y), t = x; x = y; y = t - a / b*y;return r; } int BSGS(int A, int B, int C) {if (C == 1) if (!B) return A != 1; else return -1;if (B == 1) if (A) return 0; else return -1;if (A%C == 0) if (!B) return 1; else return -1; //几种特判int m = ceil(sqrt(C)), D = 1, Base = 1; f.clear();for (int i = 0; i <= m - 1; i++) //先把A^j存进哈希表 {f[Base] = min(f[Base], i);Base = ((LL)Base*A) % C;}for (int i = 0; i <= m - 1; i++){int x, y, r = exgcd(D, C, x, y);x = ((LL)x*B%C + C) % C; //扩欧求A^jif (f.count(x)) return i*m + f[x]; //找到了D = ((LL)D*Base) % C;}return -1; } int main() {while (~scanf("%d%d%d", &C, &A, &B)){int ans = BSGS(A, B, C);if (ans == -1) printf("no solution\n"); elseprintf("%d\n", ans);}return 0; }
转载于:https://www.cnblogs.com/ALINGMAOMAO/p/9997985.html
Discrete Logging ZOJ - 1898 (模板题大小步算法)相关推荐
- POJ2417 Discrete Logging | A,C互质的bsgs算法
题目: 给出A,B,C 求最小的x使得Ax=B (mod C) 题解: bsgs算法的模板题 bsgs 全称:Baby-step giant-step 把这种问题的规模降低到了sqrt(n)级别 首 ...
- POj 3164 Command Network最小树形图 模板题 朱刘算法
Command Network After a long lasting war on words, a war on arms finally breaks out between littleke ...
- POJ3164 最小树形图 有向图的最小生成树 模板题 朱刘算法 朱永津-刘振宏算法
Command Network Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 12833 Accepted: 3717 ...
- Discrete Logging hunnu10590 pku2417 fzu 1352 hit 1928 zoj 1898
以下转自:http://hi.baidu.com/aekdycoin/blog/item/b317ca18bb24334942a9ad55.html [普通Baby Step Giant Step] ...
- hdu 2191 悼念512汶川大地震遇难同胞 【多重背包】(模板题)
题目链接:https://vjudge.net/problem/HDU-2191 悼念512汶川大地震遇难同胞--珍惜现在,感恩生活 ...
- kuangbin 最小生成树专题 - ZOJ - 1586 QS Network (朴素 Prim算法 模板题)
kuangbin 最小生成树专题 - ZOJ - 1586 QS Network (朴素 Prim算法 模板题) 总题单 week 3 [kuangbin带你飞] 题单 最小生成树 + 线段树 Cli ...
- luogu P4726 多项式指数函数(模板题FFT、多项式求逆、多项式对数函数)
luogu P4726 多项式指数函数(模板题FFT.多项式求逆.多项式对数函数) 手动博客搬家: 本文发表于20181127 08:39:42, 原地址https://blog.csdn.net/s ...
- HDU 1814 Peaceful Commission / HIT 1917 Peaceful Commission /CJOJ 1288 和平委员会(2-sat模板题)...
HDU 1814 Peaceful Commission / HIT 1917 Peaceful Commission /CJOJ 1288 和平委员会(2-sat模板题) Description T ...
- P2163 [SHOI2007]园丁的烦恼(二维数点模板题)
P2163 [SHOI2007]园丁的烦恼 题意: 在一个二维平面内有一些点,给你一个左上角和右下角的点,问这个范围内有多少点 题解: 二维数点模板题 我们设F(a,b)表示以(0,0)为左下角,(a ...
最新文章
- android RecycleView padding 和高度一样会出现什么情况?
- boost::signals2模块实现为类定义预析构函数的最小示例的测试程序
- matlab中nc文件,MATLAB读取.nc文件
- dedecms右侧悬浮_织梦dedecms网站上添加漂浮广告
- 阿里如何实现100%容器化镜像化?八年技术演进之路回顾(转)
- 【算法笔记】B1058 选择题
- 开了立体声混音仍然不能内录_蓝牙音箱有个功能很鸡肋,用好了秒变HIFI立体声...
- Android之WindowManager+OpenGL+EGL绘制(十七)
- 计算机存储系统中,有哪些措施可以提高 CPU 访问存储系统的速度?
- Java基础之访问文件与目录——获取与文件存储有关的信息(GetFileStores)
- Java常用的设计模式
- 计算机财务模型管理实验内容,计算机财务管理实验报告详细分解.doc
- php 公众号多图文消息,微信公众号怎样群发多图文消息?
- pyodbc mysql_pyodbc and mySQL
- Linux服务器集群系统LVS(一)
- pinia报错, getActivePinia was called with no active Pinia. Did you forget to install pinia?
- mysql双主架构沈剑_58 沈剑 - 数据库架构师做什么-58同城数据库架构设计思路
- XSS之xss-labs-level17
- SpringBoot @Conditional系列注解
- Cisco路由器上配置3A认证的故障调试
热门文章
- linux根目录cdef,关于linux:Cython:从python调用的cdef函数中调用扩展类型cdef方法...
- weblogic进程自动关闭_手机内存不够还卡顿,那是你不会清理,关闭这3个设置就变流畅...
- python程序中结束while循环的两种方法是_Python中while循环
- Ajax请求中async属性
- 最新酷睿计算机配置,三款intel九代酷睿全系列组装电脑配置推荐 每一款CPU都支持超频...
- 学计算机要6选3选什么学科,新高考选科6选3的学科及专业对应表查询系统
- 中断linux命令快捷键_基于Linux终端命令行的快捷键的详细解析
- svpwm矢量控制电机相电压波形_SVPWM调制中的6个非零基础电压矢量的幅值到底是Udc还是2/3Udc ? 电压利用率为什么是1?...
- windows 配置 Gitlab、Gitee(码云) 的git开发环境
- html5坦克游戏ppt说明,HTML5制作的坦克游戏