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. 网络编程 — Windows TCP服务端和客户端

    1. 服务端 #include <iostream> #include <signal.h> #include <forward_list> #include &l ...

  2. (10)-Python3之--引入

    1.什么是模块 .py文件就是模块 模块名有命名要求: 1.不要以数字.下划线开头.特殊符号.也不要以中文开头. 2.通常来说,都是以字母开头. 3.不要以关键字来命名.内置函数.内置模块.不要以第三 ...

  3. C#高级编程第11版 - 第三章 索引

    [1]3.1 创建及使用类 1.构造函数:构造函数的名字与类名相同: 使用 new 表达式创建类的对象或者结构(例如int)时,会调用其构造函数.并且通常初始化新对象的数据成员. 除非类是静态的,否则 ...

  4. 干货 | 携程多语言平台-Shark系统的高可用演进之路

    https://mp.weixin.qq.com/s/cycZslUlfyVNm2GVrZm1Cw 干货 | 携程多语言平台-Shark系统的高可用演进之路 原创 Fenlon 携程技术 2020-1 ...

  5. TCMalloc源码学习(四)(小内存块释放)

    pagemap_和pagemap_cache_ PageHeap有两个map,pagemap_记录某一内存页对应哪一个span,显然可能多页对应一个span,pagemap_cache_记录某一内存页 ...

  6. .Vue-router跳转和location.href有什么区别

    使用location.href='/url'来跳转,简单方便,但是刷新了页面:使用history.pushState('/url'),无刷新页面,静态跳转:引进router,然后使用router.pu ...

  7. react报错 TypeError: Cannot read property 'setState' of undefined

    代码如下: class test extends Component { constructor(props) { super(props); this.state = { liked: false ...

  8. linux系统rpm和yum软件包管理

    软件安装方式总结 安装软件方式有如下几种: 方式1:编译安装 将源码程序按照需求进行先编译,后安装 缺点:装过程复杂,而且很慢 优点:安装过程可控,真正的按需求进行安装(安装位置.安装的模块都可以选择 ...

  9. 为什么首次ping丢包

    1.之前就有关于为什么我们ping包的时候第一个包总是显示逗点,也就是超时的困惑.很多人的解答就是因为ARP啊,然后就没有下文了.继续追问那么为什么ARP就要是逗点呢?然后就又有一些人说因为要ARP解 ...

  10. Java 复习整理day03

    变量或者是常量, 只能用来存储一个数据, 例如: 存储一个整数, 小数或者字符串等. 如果需要同时存储多个同类型的数据, 用变量或者常量来实现的话, 非常的繁琐. 针对于 这种情况, 我们就可以通过数 ...