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 ...
随机推荐
- [Usaco2009 Feb]Bullcow 牡牛和牝牛
原题链接https://www.lydsy.com/JudgeOnline/problem.php?id=3398 容易想到的一种\(dp\)就是:设\(dp[i][j]\)表示前\(i\)头牛里面有 ...
- Centos7.4 小白式安装(初学)
虚拟机安装Centos7.4系统 适用人群(初学者) 下载Centos7.4镜像 https://pan.baidu.com/s/1NtjfdHV3OWAvfDj5vrR7HQ 提取码:hzzw 虚 ...
- 学习Java第一天
public 保证类名和文件名一致 关键字字母全小写,编辑器中有颜色标记 null空常量不能打印 变量就是内存中的存储空间 计算机中最小的存储单元时字节(byte) //1字节(B) = 8位(bit ...
- Qt Undo Framework
Qt undo/redo 框架 基于Command设计模式 支持命令压缩和命令合成 提供了与工具包其他部分融合很好的widgets和actions 术语(Terminology) Command - ...
- Nifi组件脚本开发—ExecuteScript 使用指南(一)
Part 1 - 介绍 NiFi API 和 FlowFiles ExecuteScript 是一个万能的处理器,允许用户使用编程语言定义自己的数据处理功能, 在每一次 ExecuteScript p ...
- 一文打尽 Linux/Windows端口复用实战
出品|MS08067实验室(www.ms08067.com) 本文作者:Spark(Ms08067内网安全小组成员) 定义:端口复用是指不同的应用程序使用相同端口进行通讯. 场景:内网渗透中,搭建隧道 ...
- git commit,启动文本编辑器
git commit中输入message的几种方式 - 简书 https://www.jianshu.com/p/ad461b99e860 在所有的git教程里,git commit肯定是一开始就会提 ...
- (转载)微软数据挖掘算法:Microsoft顺序分析和聚类分析算法(8)
前言 本篇文章继续我们的微软挖掘系列算法总结,前几篇文章已经将相关的主要算法做了详细的介绍,我为了展示方便,特地的整理了一个目录提纲篇:大数据时代:深入浅出微软数据挖掘算法总结连载,有兴趣的童鞋可以点 ...
- 在Centos7上安装Python+Selenium+Chrome+Chromedriver
1.下载Chrome 上一篇文章已经演示过了Python+Selenium+Firefox+Geckodriver安装步骤并通过自动化脚本打开百度 因此当前只需要安装Chrome和Chromedriv ...
- 将Oracle数据,以及表结构如何传输至MySQL
最近研究数据库,将Oracle数据库中的表结构以及数据传输给MySQL数据库,自己通过学习采用两种方式,效率较高. 方式一:Navicat 自从下载了Navicat,真的发现这是一款操作数据库十分优秀 ...