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和它本身以外不再有其他的因数:否则称为合数. 最小的质数 ...
随机推荐
- Input event驱动
Input event驱动 Linux 专门对输入设备. 键盘,鼠标,手柄,触摸屏.按键.封装一个类驱动. 主要统一与应用程序接口.这一类的设备结点都是在/dev/input/eventn( 0< ...
- Install mcrypt for php on Mac OSX 10.10 Yosemite for a Development Server
mcrypt is a file encryption method using secure techniques to exchange data. It is required for some ...
- Extjs 4.2 grid 分页问题,点击下一页参数没带过去
最初的store写法: var store = Ext.create('Ext.data.Store', { model: 'PKU',//这个地方CarPKU不是一个对象,而是一个类 remoteS ...
- AJAX请求遭遇未登录和Session失效的解决方案
使用技术:HTML + Servlet + Filter + jQuery 一般来说我们的项目都有登录过滤器,一般请求足以搞定.但是AJAX却是例外的,所以解决方法是设置响应为session失效. 一 ...
- Javascript 面向对象编程
Javascript是一个类C的语言,他的面向对象的东西相对于C++/Java比较奇怪,但是其的确相当的强大,在 Todd 同学的“对象的消息模型”一文中我们已经可以看到一些端倪了.这两天有个前同事总 ...
- 对于Oracle中分页排序查询语句执行效率的比较分析
转自:http://bbs.csdn.net/topics/370033478 对于Oracle中分页排序查询语句执行效率的比较分析 作者:lzgame 在工作中我们经常遇到需要在Oracle中进行分 ...
- 无法将 flash.display::Sprite@156b7b1 转换为 mx.core.IUIComponent
无法将 flash.display::Sprite@156b7b1 转换为 mx.core.IUIComponent 在Flex Application里,是不能直接用addChild添加Sprite ...
- mysql 的日志文件
mysql的日志文件 日志文件大致分为 error log, binary log, query log, slow query log, innodb redo log ;如图: 1.error ...
- maven工程的如何进行代码调试
1.maven项目的父项目右键选择:maven build 注意: 1.选择Browser workspace,让BaseDirectory变成:${***}形式. 2. ...
- org.hibernate.service.classloading.spi.ClassLoadingException: Specified JDBC Driver com.mysql.jdbc.Driver class not found
今天在使用hibernate搭建开发环境的时候出现了一个不可思议的问题: org.hibernate.service.classloading.spi.ClassLoadingException: S ...