UVA1426 Discrete Square Roots
思路:\(exgcd\)
提交:\(2\)次
错因:输出格式错误OTZ
题解:
求:\(r^2 ≡ x \mod N , 0 \leq r < N\),并且题目会给出 \(x,N\) 和一个合法的\(r_0\)。
原式可以转化为 \(r^2-r_0^2\equiv 0 \mod N\)
即 \((r+r_0)*(r-r_0) \equiv 0 \mod N\)
可以得到 \((r + r_0)*(r - r_0) = k * n\)
假设 \(n = a * b\),
那么 可以知道
\((r + r_0) \% a == 0\ \&\&\ (r - r_0) \% b == 0\ ||\\ (r + r_0) \% b == 0 \ \&\&\ (r - r_0) \% a == 0,\)
也就是
\(r + r_0 = k1 * a\)
\(r - r_0 = k2 * b\)
\(k1 * a + k2 * b = 2 * r_0\)
于是枚举约数,\(exgcd\),然后答案扔到\(set\)里正好排序\(+\)去重。
代码:
#include<cstdio>
#include<iostream>
#include<cmath>
#include<set>
#define ll long long
#define rr register ll
#define R register int
using namespace std;
namespace Luitaryi {
template<class I> inline I g(I& x) { x=0; register I f=1;
register char ch; while(!isdigit(ch=getchar())) f=ch=='-'?-1:f;
do x=x*10+(ch^48); while(isdigit(ch=getchar())); return x*=f;
}
inline ll exgcd(int a,int b,ll& x,ll& y) {
if(!b) {x=1,y=0; return a;}
rr d=exgcd(b,a%b,y,x); y-=a/b*x; return d;
} int T; ll n,m,r0;
set<ll> s;
inline void solve(int a,int b,int c) {
rr x,y; rr d=exgcd(a,b,x,y); if(c%d) return ;
rr tmp,der=abs(b/d); x*=c/d; x=(x%der+der)%der; y=x; while(1) {
tmp=a*x-r0; if(tmp>=0) {
if(tmp>=n) break; s.insert(tmp);
} x+=der;
} x=y; while(1) {
tmp=a*x-r0; if(tmp<=n) {
if(tmp<0) break; s.insert(tmp);
} x-=der;
}
}
inline void main() {
while(g(m),g(n),g(r0),m||n||r0) {
s.clear(); s.insert(r0);
for(R i=1;i<=sqrt(n);++i) {
if(n%i==0) solve(i,n/i,2*r0),solve(n/i,i,2*r0);
} printf("Case %d:",++T);
for(set<ll>::iterator it=s.begin();it!=s.end();++it) printf(" %lld",*it); puts("");
}
}
} signed main() {Luitaryi::main(); return 0;}
2019.08.23
77
UVA1426 Discrete Square Roots的更多相关文章
- UVA 1426 - Discrete Square Roots(数论)
UVA 1426 - Discrete Square Roots 题目链接 题意:给定X, N. R.要求r2≡x (mod n) (1 <= r < n)的全部解.R为一个已知解 思路: ...
- UVa 1426 Discrete Square Roots (扩展欧几里德)
题意:给定 x,n,r,满足 r2 ≡ x mod(n) ,求在 0 ~ n 内满足 rr2 ≡ x mod(n) 的所有的 rr. 析:很明显直接是肯定不行了,复杂度太高了. r2 ≡ x mod( ...
- Discrete Square Roots UVALive - 4270(拓展欧几里得)
a≡b(mod n)的含义是“a和b除以n的余数相同”,其充要条件是“a-b是n的整数倍”: 求所有满足条件r^2=x(mod m)的r 题目已经给定了一个初始的r,x,m #include < ...
- UVALive 4270 Discrete Square Roots
题目描述: 在已知一个离散平方根的情况下,按照从小到大的顺序输出其他所有的离散平方根. 在模n意义下,非负整数x的离散平方根是满足0<=r<n且r2=x(mod n)的整数r. 解题思路: ...
- UVALive - 4270 Discrete Square Roots (扩展欧几里得)
给出一组正整数$x,n,r$,使得$r^2\equiv x(mod\: n)$,求出所有满足该等式的$r$. 假设有另一个解$r'$满足条件,则有$r^2-r'^2=kn$ 因式分解,得$(r+r') ...
- Square roots
Loops are often used in programs that compute numerical results by starting with an approximate answ ...
- 欧拉工程第64题:Odd period square roots
题目链接 找循环位数是奇数的数有多少个 这个自己很难写出来,完全不能暴力 维基百科链接 维基百科上面说的很好,上面的算法实现就好了. 就是上面的 Java程序: package project61; ...
- [MIT6.006] 12. Square Roots, Newton's Method 平方根,牛顿法
首先让我们回顾下上节课讲的,用牛顿法计算√2的内容: 简单来说,牛顿法从x0=1不断向后计算逼近√2的值,而刚开始计算的精度是1,随着牛顿法的逼近(共log2d个循环),就能使得√2逼近值的精度达到d ...
- uva 1426 离散平方根
1426 - Discrete Square Roots Time limit: 3.000 seconds A square root of a number x <tex2html_verb ...
随机推荐
- 剑指offer52:正则表达式匹配
1 题目描述 请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符‘.’表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个 ...
- flask使用tablib导出excel数据表
在网页中常常有导出数据的需求,尤其是一下管理类平台.在flask中要导出excel数据表,通常可以使用xlwt库,创建文件并逐行写入数据,但是使用起来总是感觉很麻烦.tablib库相对操作更加方便. ...
- 数据结构——java实现队列
顺序队列: 概念: 队列是一种先进先出的线性表,只允许在一端插入,另一端删除.允许插入的一端称为队尾,允许删除的一端称为队头 顺序队列的实现: import org.junit.jupiter.api ...
- Sonya and Bitwise OR CodeForces - 1004F (线段树,分治)
大意: 给定序列$a$, 给定整数$x$. 两种操作(1)单点修改 (2)给定区间$[l,r]$,求有多少子区间满足位或和不少于$x$. 假设不带修改. 固定右端点, 合法区间关于左端点单调的. 可以 ...
- 红帽linux系统开机自启动脚本。
其实很多东西在最后完成以后会觉得也就那样,有意思的是探究的过程. 前段时间老板要求把一个程序做成linux系统开机自启动脚本的模式. 首先你需要写一个脚本. 我这边建立了一个.sh的脚本,就是用脚本启 ...
- KNN算法识别手写数字
需求: 利用一个手写数字“先验数据”集,使用knn算法来实现对手写数字的自动识别: 先验数据(训练数据)集: ♦数据维度比较大,样本数比较多. ♦ 数据集包括数字0-9的手写体. ♦每个数字大约有20 ...
- 媲美pandas的数据分析工具包Datatable
1 前言 data.table 是 R 中一个非常通用和高性能的包,使用简单.方便而且速度快,在 R 语言社区非常受欢迎,每个月的下载量超过 40 万,有近 650 个 CRAN 和 Biocondu ...
- 转载一篇有关于diff的文章,方便以后复习
本文章是转载的,为了方便以后复习,特地记录一下.他人请去原地址观看!!! 文章原地址:http://www.ruanyifeng.com/blog/2012/08/how_to_read_diff.h ...
- Go map使用
前言 map 是在 Go 中将值(value)与键(key)关联的内置类型.通过相应的键可以获取到值. 在一个map里所有的键都是唯一的,而且必须是支持==和!=操作符的类型,切片.函数以及包含切片的 ...
- 【Zookeeper】实现负载均衡原理
一.思路 使用Zookeeper实现负载均衡原理,服务器端将启动的服务注册到,zk注册中心上,采用临时节点.客户端从zk节点上获取最新服务节点信息,本地使用负载均衡算法,随机分配服务器. 服务端启动的 ...