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和它本身以外不再有其他的因数:否则称为合数. 最小的质数 ...
随机推荐
- 【BZOJ 1026】 [SCOI2009]windy数
Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? In ...
- mysql 错误- 磁盘空间不足,
mysql 磁盘空间不足错误 磁盘空间满了, 写不进去了. :: mysqld_safe Starting mysqld daemon with databases from /alidata/ser ...
- switch..case函数的基础使用一
基本作用:switch中的参数与case的值进行比对,相等则进入case. JDK1.7 switch支持int.Integer.String类型 package com.my.test; impor ...
- 17.2 The DispatcherServlet
综述: Spring’s web MVC framework is, like many other web MVC frameworks, request-driven, designed arou ...
- 如何实现Windows Phone代码与Unity相互通信(事件方式)
源地址:http://www.cnblogs.com/petto/p/3909063.html 一些废话 昨天写一篇今天写一篇.不是我闲的蛋疼,是今天一天碰到了好几个恼人的问题,浪费一天时间搞定.本文 ...
- WAF安恒
http://wenku.baidu.com/view/c242927f581b6bd97e19ea1a.html?from=search
- java 多线程 CountDownLatch用法
CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 主要方法 public CountDownLatch(int count); pu ...
- cvc-elt.1: Cannot find the declaration of element---与spring 无关的schema 验证失败
晚上查了好久,都是spring 出这种问题的解决方式,终于查到为什么了. http://wakan.blog.51cto.com/59583/7218/ 转自这个人.. 多谢啦! 为了验证 XML 文 ...
- 【nginx运维基础(7)】常用PHP开源程序的NginxRewrite示例
在写伪静态的时候,可以先用一个打印$_GET的PHP文件来测试,并且一定注意浏览器缓存,另外正则里如果有"{}",正则要用双引号包起来 dedecms location / { r ...
- 进程内核栈、用户栈及 Linux 进程栈和线程栈的区别
Linux 进程栈和线程栈的区别 http://www.cnblogs.com/luosongchao/p/3680312.html 总结:线程栈的空间开辟在所属进程的堆区,线程与其所属的进程共享进程 ...