exgcd&&中国剩余定理专题练习
hdu1573求中国剩余定理解的个数
#include <iostream>
#include <cstdio> using namespace std;
int a[100],b[100];
int exgcd(int a,int b,int &x,int &y){
if(b==0){
x=1;y=0;return a;
}
int d=exgcd(b,a%b,x,y),t;
t=x;x=y;y=t-a/b*y;
return d;
}
int main(){
int T;scanf("%d",&T);
while(T--){
int n,m;scanf("%d%d",&n,&m);
for(int i=0;i<m;++i) scanf("%d",a+i);
for(int i=0;i<m;++i) scanf("%d",b+i);
int a1=a[0],r1=b[0],flag=0;
for(int i=1;i<m;++i){
int a2=a[i],r2=b[i];
int d=r2-r1,x,y,GCD=exgcd(a1,a2,x,y);
if(d%GCD){
flag=1;break;
}
x*=d/GCD;int mod=a2/GCD;
x=(x%mod+mod)%mod;
r1=x*a1+r1;
a1=a1*a2/GCD;
}
if(r1>n||flag) printf("0\n");
else printf("%d\n",(n-r1)/a1+1-(r1==0?1:0));//没考虑r1==0的情况
}
}
poj1061 列同余方程,exgcd解方程
#include <iostream>
#include <cstdio> using namespace std;
typedef long long ll;
ll exgcd(ll a,ll b,ll &x,ll &y){
if(b==0){
x=1;y=0;return a;
}
ll d=exgcd(b,a%b,x,y),t;
t=x;x=y;y=t-a/b*y;
return d;
}
int main(){
ll x,y,m,n,L;
while(~scanf("%I64d%I64d%I64d%I64d%I64d",&x,&y,&m,&n,&L)){
ll rx,ry,GCD,D=((y-x)%L+L)%L,A=((m-n)%L+L)%L;
GCD=exgcd(A,L,rx,ry);
if(D%GCD) {
printf("Impossible\n");continue;
}
ll mod=L/GCD;rx*=D/GCD;
rx=(rx%mod+mod)%mod;
printf("%I64d\n",rx);
}
return 0;
}
poj2115 不互质情况下又需要求类似逆元的东西
#include <iostream>
#include <cstdio> using namespace std;
typedef long long ll;
ll A,B,C,k;
ll exgcd(ll a,ll b,ll &x,ll &y){
if(b==0) {
x=1;y=0;return a;
}
ll d=exgcd(b,a%b,x,y),t;
t=x;x=y;y=t-a/b*y;
return d;
}
int main(){
while(~scanf("%I64d%I64d%I64d%I64d",&A,&B,&C,&k)){
if(A+B+C+k==0) break;
ll n=(1ll<<(k));
ll D=((B-A)%n+n)%n,x,y,GCD;
GCD=exgcd(C,n,x,y);
if(D%GCD){
printf("FOREVER\n");continue;
}
ll mod=n/GCD;x*=D/GCD;
x=(x%mod+mod)%mod;
printf("%I64d\n",x);
}
return 0;
}
poj2891 一元线性方程组-不互质的中国剩余定理
#include <iostream>
#include <cstdio> using namespace std;
typedef long long ll;
ll gcd(ll a,ll b){
return b==0?a:gcd(b,a%b);
}
ll exgcd(ll a,ll b,ll &x,ll &y){
if(b==0){
x=1;y=0;return a;
}
ll d=exgcd(b,a%b,x,y),t;
t=x;x=y;y=t-a/b*y;
return d;
}
int main(){
ll k;
while(~scanf("%I64d",&k)){
ll a1,r1,a2,r2,ans;scanf("%I64d%I64d",&a1,&r1);
int flag=0;
for(int i=1;i<k;++i){
scanf("%I64d%I64d",&a2,&r2);
if(flag) continue;
ll d=r2-r1,x,y,GCD=gcd(a1,a2);
if(d%GCD) {
flag=1;continue;
}
ll A1=a1/GCD,A2=a2/GCD,D=d/GCD;
exgcd(A1,A2,x,y);
x*=D;x=(x%A2+A2)%A2;
r1=x*a1+r1;
a1=a1*a2/GCD;
}
if(flag) printf("-1\n");
else printf("%I64d\n",r1);
}
return 0;
}
poj 1006 高峰期出现的同一天,中国剩余定理
#include <iostream>
#include <cstdio> using namespace std;
int p,e,i,d;
int exgcd(int a,int b,int &x,int &y){
if(b==0){
x=1;y=0;return a;
}
int d=exgcd(b,a%b,x,y),t;
t=x;x=y;y=t-a/b*y;
return d;
}
int main(){
int cas=0;
while(~scanf("%d%d%d%d",&p,&e,&i,&d)){
if(p+e+i+d==-4) break;
int N=23*28*33,K,x,y,ans=0;
exgcd(23,K=N/23,x,y);y=(y%23+23)%23;
ans=(ans+K*y*(p-d))%N;
exgcd(28,K=N/28,x,y);y=(y%28+28)%28;
ans=(ans+K*y*(e-d))%N;
exgcd(33,K=N/33,x,y);y=(y%33+33)%33;
ans=(ans+K*y*(i-d))%N;
if(ans<=0) ans+=N;
printf("Case %d: the next triple peak occurs in %d days.\n",++cas,ans);
}
return 0;
}
poj2142 对exgcd得出的|s|+|t|最小的解,求s>0时t为多少,t>0时s为多少,两个方向求一下最小正整数解
#include <iostream>
#include <cstdio> using namespace std;
int a,b,d;
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
int exgcd(int a,int b,int &x,int &y){
if(b==0){x=1;y=0;return a;}
int d=exgcd(b,a%b,x,y),t;
t=x;x=y;y=t-a/b*y;
return d;
}
int main(){
while(~scanf("%d%d%d",&a,&b,&d)){
if(a+b+d==0) break;
int GCD=gcd(a,b);
a/=GCD,b/=GCD,d/=GCD;
int x,y;exgcd(a,b,x,y);
int x1,y1,x2,y2;
x1=x*d;
x1=(x1%b+b)%b;y1=(d-a*x1)/b;if(y1<0) y1=-y1;
y2=y*d;
y2=(y2%a+a)%a;x2=(d-b*y2)/a;if(x2<0) x2=-x2;
if(x1+y1>x2+y2) {
x1=x2;y1=y2;
}
printf("%d %d\n",x1,y1);
}
return 0;
}
exgcd&&中国剩余定理专题练习的更多相关文章
- POJ 2891 Strange Way to Express Integers 中国剩余定理 数论 exgcd
http://poj.org/problem?id=2891 题意就是孙子算经里那个定理的基础描述不过换了数字和约束条件的个数…… https://blog.csdn.net/HownoneHe/ar ...
- 欧几里得(辗转相除gcd)、扩欧(exgcd)、中国剩余定理(crt)、扩展中国剩余定理(excrt)简要介绍
1.欧几里得算法(辗转相除法) 直接上gcd和lcm代码. int gcd(int x,int y){ ?x:gcd(y,x%y); } int lcm(int x,int y){ return x* ...
- 中国剩余定理及其拓展 CRT&EXGCD
中国剩余定理,又叫孙子定理. 作为一个梗广为流传.其实它的学名叫中国单身狗定理. 中国剩余定理 中国剩余定理是来干什么用的呢? 其实就是用来解同余方程组的.那么什么又是同余方程组呢. 顾名思义就是n个 ...
- BZOJ2219数论之神——BSGS+中国剩余定理+原根与指标+欧拉定理+exgcd
题目描述 在ACM_DIY群中,有一位叫做“傻崽”的同学由于在数论方面造诣很高,被称为数轮之神!对于任何数论问题,他都能瞬间秒杀!一天他在群里面问了一个神题: 对于给定的3个非负整数 A,B,K 求出 ...
- 清北学堂-DAY2-数论专题-中国剩余定理(CRT)
首先请看定义:(百科上抄下来的)孙子定理是中国古代求解一次同余式组(见同余)的方法.是数论中一个重要定理.又称中国余数定理. 一元线性同余方程组问题最早可见于中国南北朝时期(公元5世纪)的数学著作&l ...
- 逆元 exgcd 费马小定理 中国剩余定理的理解和证明
一.除法取模逆元 如果我们要通过一个前面取过模的式子递推出其他要取模的式子,而递推式里又存在除法 那么一个很尴尬的事情出现了,假如a[i-1]=100%31=7 a[i]=(a[i-1]/2)%31 ...
- 51nod1079(中国剩余定理)
题目链接: http://www.51nod.com/onlineJudge/user.html#!userId=21687 题意: 中文题诶~ 思路: 本题就是个中国剩余定理模板题,不过模拟也可以过 ...
- HDU 5446 中国剩余定理+lucas
Unknown Treasure Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ...
- POJ 1006 - Biorhythms (中国剩余定理)
B - Biorhythms Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Subm ...
随机推荐
- 写给 Linux 初学者的一封信
大家好,我是肖邦. 这篇文章是写给 Linux 初学者的,我会分享一些作为初学者应该知道的一些东西,这些内容都是本人从事 Linux 开发工作多年的心得体会,相信会对初学者有所帮助.如果你是 Linu ...
- LTH7锂电池充放电IC完整方案
内容目录: A,LTH7贴片5脚充电芯片 PW4054 1, 单节的锂电池保护电路 单节为3.7V锂电池(也叫4.2V)和3.8V锂电池(也叫4.35V) 2, 单节的锂电池充电电路 ...
- InnoDB事务篇
1.解决数据更新丢失的问题 1)LBCC:基于锁的并发控制.让操作串行化执行.效率低. 2)MVCC:基于版本的并发控制.使用快照形式.效率高.读写不冲突.主流数据库都是使用的MVCC. 2.Inno ...
- redis修改requirepass 参数 改密码
1. 不重启redis如何配置密码? a. 在配置文件中配置requirepass的密码(当redis重启时密码依然有效). # requirepass foobared -> 修改成 : ...
- mysql的安装使用及其用户管理
mysql的安装使用及其用户管理 一.mariadb安装 搭建yum源 [mariadb] name = MariaDB baseurl = http://mirrors.ustc.edu.cn/ ...
- BIO,NIO,AIO 总结
BIO,NIO,AIO 总结 Java 中的 BIO.NIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装.程序员在使用这些 API 的时候,不需要关心操作系统层面的知识,也不 ...
- ThinkPHP 5.0.24 反序列化RCE (Windows下EXP)
直接上exp吧,Windows下. <?php namespace think\process\pipes; class Windows { private $files = []; publi ...
- python--函数、参数、名称空间与作用域、匿名函数、内置函数、闭包
python函数 函数定义 def welcome(): print('hello world!!') welcome() #函数调用 ...运行结果 hello world!! 函数定义和编写原则: ...
- 使用V8和node轻松profile分析nodejs应用程序
目录 简介 使用V8的内置profiler工具 使用gm来build V8 手动build V8 生成profile文件 分析生成的文件 生成时间线图 使用nodejs的profile工具 简介 我们 ...
- Pytest(2)使用和调用方法
Pytest执行用例规则 Pytest在命令行中支持多种方式来运行和选择测试用例 1.对某个目录下所有的用例 pytest 2.对模块中进行测试 pytest test_mod.py 3.对文件夹进行 ...