POJ 1808 + Ural 1132 平方剩余
来源:互联网 发布:面纱3.0温控数据 编辑:程序博客网 时间:2024/05/21 04:01
链接:http://poj.org/problem?id=1808
http://acm.timus.ru/problem.aspx?space=1&num=1132
题意:两道题都是模板题,第一个是判断是否有平方剩余,第二个是计算平方剩余。
思路:平方剩余就是给定a,n(n为质数) 问 x^2 ≡ a (mod n) 是否有解,可以用a^((n - 1)/2) ≡ ±1(mod n) 当为1是二次剩余,为-1是非二次剩余。
资料:http://blog.csdn.net/acdreamers/article/details/10182281
参考资料中基本正确,注意区分好同余和相等的关系。
代码:
LL w;LL pow_mod(LL aa,LL ii,LL nn){ if(ii==0) return 1%nn; LL temp=pow_mod(aa,ii>>1,nn); temp=temp*temp%nn; if(ii&1) temp=temp*aa%nn; return temp;}struct comp{ LL r,i;};comp multi(comp a, comp b, LL m) { comp ans; ans.r = (a.r * b.r % m + a.i * b.i % m * w % m) % m; ans.i = (a.r * b.i % m + a.i * b.r% m) % m; return ans; } comp pow_mod(comp a, LL b,LL m) { comp ans; ans.r = 1; ans.i = 0; while(b) { if(b & 1) { ans = multi(ans, a, m); b--; } b >>= 1; a = multi(a, a, m); } return ans; }LL Legendre(LL a, LL p){ return pow_mod(a, (p-1)>>1, p);}LL Quadratic_residue(LL n,LL p){ if(p==2) return 1; if (Legendre(n, p) + 1 == p) return -1; LL a = -1, t; while(1) { a = rand() % p; t = a * a - n; w=(t%p+p)%p; if(Legendre(w, p) + 1 == p) break; } comp temp; temp.r=a; temp.i=1; comp ans; ans=pow_mod(temp,(p+1)>>1,p); return ans.r;}
0 0
- POJ 1808 + Ural 1132 平方剩余
- 平方剩余 (poj 1808)
- poj 1808 Quadratic Residues 【平方剩余】【数论】
- URAL 1132 二次剩余
- URAL 1132 二次剩余
- 平方剩余
- URAL 1132 Square Root <二次剩余 + 数论>
- URAL 1132 Square Root(二次剩余)
- 求平方剩余
- [Ural 1132] Square Root (二次剩余方程)
- [求解二次剩余 数论技巧 随机化] Ural 1132 Square Root
- URAL 1132 Square Root 暴力枚举,二次剩余.
- URAL 1204 中国剩余定理
- POJ 1808 Quadratic Residues(二次剩余)
- 平方剩余(例题+详解+代码模板)
- Ural 1132. Square Root 二次剩余
- poj 1006 剩余定理
- poj 1006 剩余定理
- 移动电子商务众志微商发展趋势
- 2014年去哪儿网笔试题--给定一个整型数组,对这个整型数组排序,使得按序拼接数组各元素得到的值最小。
- 深入理解MongoDB(一)Linux下配置MongoDB全攻略
- POJ 1265 Area (皮克定理)
- System.Net.Http 整理
- POJ 1808 + Ural 1132 平方剩余
- C语言03
- iOS AddressBook
- iOS UIActionSheet被tabbar挡住
- hdoj2050 折线分割平面
- Threejs 加载 DAE 模型遇到关题汇总
- uva11137Ingenuous Cubrency(完全背包)
- poj 1276 Cash Machine (多重背包)
- 工具使用-------notepad++正则表达式替换字符串详解