二次同余式(草稿)
来源:互联网 发布:java字符串占位符替换 编辑:程序博客网 时间:2024/05/25 23:26
原理
求解方法
实现
/*==================================================*\| 二次同余式 x^2 === a (mod p) 的解 -- 最多两个| p为奇素数 且 (a, p) = 1\*==================================================*/LL modSqrt(LL a, LL p) { if(p == 2) return a%p; if(powMod(a, (p-1)>>1, p) != 1) return -1; if(p%4 == 3) return powMod(a, (p+1)>>2, p); LL b, x; for(b = 1; powMod(b, (p-1)>>1, p) == 1; ++b); LL i = (p-1)>>1, k = 0; do { i >>= 1, k >>= 1; if((powMod(a, i, p)*powMod(b, k, p)+1)%p == 0) k += ((p-1)>>1); } while(i%2 == 0); x = (powMod(a, (i+1)>>1, p)*powMod(b, k>>1, p)) % p; return x;}// 两个解为 x 和 p-x/*==================================================*\| 二次同余式 x^2 === a (mod p) 的解 -- 最多两个| 另一种解法 -- A神解法\*==================================================*/struct node { LL p, d;};//二次域 -- 有理部分 + 无理部分node mulMod(node a, node b, LL w, LL p) { node c; c.p = (a.p*b.p%p + a.d*b.d%p*w%p)%p; c.d = (a.p*b.d%p + a.d*b.p%p)%p; return c;}//二次域乘法 -- w为根号下的值node powMod(node a, LL b, LL w, LL p) { node r; r.p = 1, r.d = 0; while(b) { if(b&1) r = mulMod(r, a, w, p); a = mulMod(a, a, w, p); b >>= 1; } return r;}LL modSqrt(LL a, LL p) { a %= p; if(p == 2) return a%p; if(powMod(a, (p-1)>>1, p)== p-1) return -1; LL b = -1, w; while(1) { b = rand() % p; //++b; w = b*b - a; w = (w+p)%p; if(powMod(w, (p-1)>>1, p) == p-1) break; } node r, ans; r.p = b, r.d = 1; ans = powMod(r, (p+1)>>1, w, p); return ans.p;}
模为合数的解法
应用
Square Root URAL - 1132
阅读全文
0 0
- 二次同余式(草稿)
- 求解二次同余式
- 同余式。。
- Miller_Rabin素数测试[Fermat小定理][二次探测定理][同余式][Wilson定理]
- Miller_Rabin素数测试[Fermat小定理][二次探测定理][同余式][Wilson定理]
- Miller_Rabin素数测试[Fermat小定理][二次探测定理][同余式][Wilson定理]
- Miller_Rabin素数测试[Fermat小定理][二次探测定理][同余式][Wilson定理]
- 草稿
- 草稿
- 草稿
- 草稿
- 草稿
- 草稿
- 草稿
- 草稿
- (草稿)
- 草稿
- 草稿
- 最常用的15大Eclipse开发快捷键技巧
- vim操作指令
- 微服务架构(Microservice Architecture)
- python 数据库的增删改查+模块
- Faster-RCNN+ZF用自己的数据集训练模型(Python版本)
- 二次同余式(草稿)
- React基础(未完结)
- 【Cython】Cython在Windows环境下的部署安装
- 最好用的剧情插件:USequencer初识
- 将BLOB类型值在富文本显示和将富文本内容以BLOB类型存储到数据库
- SourceTree 免登录跳过初始设置
- html复杂表格
- 自定义View实现视差特效
- matplotlib 详解3 面向对象