POJ 1808 Quadratic Residues(平方剩余相关)
题目链接:http://poj.org/problem?id=1808
题意:如下。对于素数p,若存在x使得x^2%p=a,则其值为1。否则为-1。现在给出a、p,计算其值。

思路:

若a为正数则利用公式1即可;否则利用公式2、5将-1提出来。跟本题有点关系的是计算x^2%p=a最小的x。在最下面给出代码,modsqr(a,p)函数。
i64 mul(i64 a,i64 b,i64 M)
{
i64 ans=0;
a%=M;
b%=M;
while(b)
{
if(b&1) ans=(ans+a)%M;
a=(a+a)%M;
b>>=1;
}
return ans;
}
i64 Pow(i64 a,i64 b,i64 M)
{
i64 ans=1;
while(b)
{
if(b&1) ans=mul(ans,a,M);
a=mul(a,a,M);
b>>=1;
}
return ans;
}
int judge(i64 d,i64 p)
{
if(d>0)
{
d%=p;
if(d==0) return 0;
if(Pow(d,(p-1)/2,p)==1) return 1;
return -1;
}
else
{
int coef=((p-1)%4==0)?1:-1;
d=-d; d%=p;
if(Pow(d,(p-1)/2,p)==1) return coef;
else return -coef;
}
}
i64 d,p;
int main()
{
int num=0;
rush()
{
scanf("%lld%lld",&d,&p);
printf("Scenario #%d:\n",++num);
PR(judge(d,p)==-1?-1:1);
puts("");
}
}
i64 modsqr(i64 a,i64 n)
{
if(n==2) return a%n;
if(Pow(a,(n-1)/2,n)!=1) return -1;
i64 x;
if(n%4==3) x=Pow(a,(n+1)/4,n);
else
{
i64 b;
for(b=1;Pow(b,(n-1)/2,n)==1;b++);
i64 i=(n-1)/2,k=0;
do
{
i>>=1; k>>=1;
if((Pow(a,i,n)*Pow(b,k,n)+1)%n==0)
{
k+=(n-1)/2;
}
}while(i%2==0);
x=Pow(a,(i+1)/2,n)*Pow(b,k/2,n)%n;
}
if(x*2>n) x=n-x;
return x;
}
POJ 1808 Quadratic Residues(平方剩余相关)的更多相关文章
- Quadratic Residues POJ - 1808 二次剩余定理
\(\color{#0066ff}{题目链接 }\) link \(\color{#0066ff}{ 题解 }\) 结论题 \((\frac{a}{p})=a^{\frac{p-1}{2}}\mod ...
- POJ 1087 A Plug for UNIX / HDU 1526 A Plug for UNIX / ZOJ 1157 A Plug for UNIX / UVA 753 A Plug for UNIX / UVAlive 5418 A Plug for UNIX / SCU 1671 A Plug for UNIX (网络流)
POJ 1087 A Plug for UNIX / HDU 1526 A Plug for UNIX / ZOJ 1157 A Plug for UNIX / UVA 753 A Plug for ...
- poj 1269 Intersecting Lines——叉积求直线交点坐标
题目:http://poj.org/problem?id=1269 相关知识: 叉积求面积:https://www.cnblogs.com/xiexinxinlove/p/3708147.html什么 ...
- 数学:二次剩余与n次剩余
二次剩余求的是这个东西 如果给定x,再给定若干个大的质数p,如果结果a相同,那么x是完全平方数? 给出别人的二次剩余的代码: /*poj 1808 题意: 判断平方剩余,即判断(x^2)%p=a是否有 ...
- 嵌入式单片机STM32应用技术(课本)
目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...
- POJ 2262 Goldbach's Conjecture(素数相关)
POJ 2262 Goldbach's Conjecture(素数相关) http://poj.org/problem?id=2262 题意: 给你一个[6,1000000]范围内的偶数,要你将它表示 ...
- POJ 1860 Currency Exchange / ZOJ 1544 Currency Exchange (最短路径相关,spfa求环)
POJ 1860 Currency Exchange / ZOJ 1544 Currency Exchange (最短路径相关,spfa求环) Description Several currency ...
- 1808:公共子序列 即POJ 1458 Common Subsequence
1808:公共子序列 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 我们称序列Z = < z1, z2, ..., zk >是序列X = < ...
- POJ中和质数相关的三个例题(POJ 2262、POJ 2739、POJ 3006)
质数(prime number)又称素数,有无限个.一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数:否则称为合数. 最小的质数 ...
随机推荐
- 从零开始学ios开发(十六):Navigation Controllers and Table Views(下)
终于进行到下了,这是关于Navigation Controllers和Table Views的最后一个例子,稍微复杂了一点,但也仅仅是复杂而已,难度不大,我们开始吧. 如果没有上一篇的代码,可以从这里 ...
- self,parent,this区别
我容易混淆public,private,protected,还容易混淆this,self这些东西.前面已经写了一篇关于public,private,protected博文了,下面来说一下this,se ...
- SqlServer维护计划
http://blog.csdn.net/yunye114105/article/details/6594826
- matlab实现贝塞尔曲线绘图pdf查看
贝塞尔曲线绘图方法: %Program 3.7 Freehand Draw Program Using Bezier Splines %Click in Matlab figure window to ...
- c语言基础:各种数据类型的输出占位符
c语言中的输出操作相对java来说是比较麻烦的,每种数据类型的输出都有各自的占位符: 下面是各种数据类型的输出占位符: short/int : %d ; printf("这个整数是:%d&q ...
- c语言编程之栈(数组实现)
用数组实现的顺序栈,完成了出栈入栈功能. #include"stdio.h" typedef int element; #define max 100 typedef struct ...
- 循序渐进Java Socket网络编程(多客户端、信息共享、文件传输)
目录[-] 一.TCP/IP协议 二.TCP与UDP 三.Socket是什么 四.Java中的Socket 五.基本的Client/Server程序 六.多客户端连接服务器 七.信息共享 八.文件传输 ...
- BAT CMD 批处理文件脚本 -1
http://www.cnblogs.com/linglizeng/archive/2010/01/29/Bat-CMD-ChineseVerion.html 1. 综述 ...
- Matlab中unifrnd函数使用解析
1.生成N阶[a,b]均匀分布数组 >> unifrnd(3,5,5,5) ans = 3.8651 4.6677 4.8115 4.3456 4.8560 4.0241 3.4079 3 ...
- iOS开发 .framework的Optional(弱引用)和Required(强引用)区别
首先,参考文档:https://blog.stackmob.com/2013/03/objective-c-tip-of-the-month-optional-frameworks/ 强引用(Requ ...