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&&中国剩余定理专题练习的更多相关文章

  1. POJ 2891 Strange Way to Express Integers 中国剩余定理 数论 exgcd

    http://poj.org/problem?id=2891 题意就是孙子算经里那个定理的基础描述不过换了数字和约束条件的个数…… https://blog.csdn.net/HownoneHe/ar ...

  2. 欧几里得(辗转相除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* ...

  3. 中国剩余定理及其拓展 CRT&EXGCD

    中国剩余定理,又叫孙子定理. 作为一个梗广为流传.其实它的学名叫中国单身狗定理. 中国剩余定理 中国剩余定理是来干什么用的呢? 其实就是用来解同余方程组的.那么什么又是同余方程组呢. 顾名思义就是n个 ...

  4. BZOJ2219数论之神——BSGS+中国剩余定理+原根与指标+欧拉定理+exgcd

    题目描述 在ACM_DIY群中,有一位叫做“傻崽”的同学由于在数论方面造诣很高,被称为数轮之神!对于任何数论问题,他都能瞬间秒杀!一天他在群里面问了一个神题: 对于给定的3个非负整数 A,B,K 求出 ...

  5. 清北学堂-DAY2-数论专题-中国剩余定理(CRT)

    首先请看定义:(百科上抄下来的)孙子定理是中国古代求解一次同余式组(见同余)的方法.是数论中一个重要定理.又称中国余数定理. 一元线性同余方程组问题最早可见于中国南北朝时期(公元5世纪)的数学著作&l ...

  6. 逆元 exgcd 费马小定理 中国剩余定理的理解和证明

    一.除法取模逆元 如果我们要通过一个前面取过模的式子递推出其他要取模的式子,而递推式里又存在除法 那么一个很尴尬的事情出现了,假如a[i-1]=100%31=7 a[i]=(a[i-1]/2)%31 ...

  7. 51nod1079(中国剩余定理)

    题目链接: http://www.51nod.com/onlineJudge/user.html#!userId=21687 题意: 中文题诶~ 思路: 本题就是个中国剩余定理模板题,不过模拟也可以过 ...

  8. HDU 5446 中国剩余定理+lucas

    Unknown Treasure Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Other ...

  9. POJ 1006 - Biorhythms (中国剩余定理)

    B - Biorhythms Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Subm ...

随机推荐

  1. 如何将1rpx转为1rem

    最近我在开发的过程中,出现了一个需求,我需要把开发好的小程序倒模成H5页面,这里就涉及一个布局单位问题,我们小程序用的单位都rpx,是按照750rpx铺满整个页面来算的,可H5又不支持rpx单位,这里 ...

  2. CSGO项目

    #include <Windows.h> #include <sstream> #include <iostream> #include <math.h> ...

  3. (万字好文)Dubbo服务熔断与降级的深入讲解&代码实战

    原文链接:(万字好文)Dubbo服务熔断与降级的深入讲解&代码实战 一.Dubbo服务降级实战 1 mock 机制 谈到服务降级,Dubbo 本身就提供了服务降级的机制:而 Dubbo 的服务 ...

  4. 最短路-朴素版Dijkstra算法&堆优化版的Dijkstra

    朴素版Dijkstra 目标 找到从一个点到其他点的最短距离 思路 ①初始化距离dist数组,将起点dist距离设为0,其他点的距离设为无穷(就是很大的值) ②for循环遍历n次,每层循环里找出不在S ...

  5. Spark Dataset DataFrame 操作

    Spark Dataset DataFrame 操作 相关博文参考 sparksql中dataframe的用法 一.Spark2 Dataset DataFrame空值null,NaN判断和处理 1. ...

  6. java架构《Socket网络编程基础篇》

    本章主要介绍Socket的基本概念,传统的同步阻塞式I/O编程,伪异步IO实现,学习NIO的同步非阻塞编程和NIO2.0(AIO)异步非阻塞编程. 目前为止,Java共支持3种网络编程模型:BIO.N ...

  7. centos安装Qt

    转:http://blog.csdn.net/wavelee/article/details/7855727 在编译Qt4.8.6版本的库时,在配置时 ./configure 出现了如下的错误: Ba ...

  8. 网际互连__TCP/IP三次握手和四次挥手

    在TCP/IP协议中,TCP协议提供可靠的连接服务. 位码即tcp标志位,有6种标示: SYN(synchronous建立联机).ACK(acknowledgement 确认).PSH(push传送) ...

  9. 在 .NET Core Logging中使用 Trace和TraceSource

    本文介绍了在.NET Core中如何在组件设计中使用Trace和TraceSource. 在以下方面会提供一些帮助: 1.你已经为.NET Framework和.NET Core / .NET Sta ...

  10. vs中python包安装教程

    vs安装python很简单,只需要在vs安装包中选择python就可以了,这里使用的python3.7: 如果有了解,都知道安装python包的指令:"pip install xxx&quo ...