NOIP2012提高组 同余方程
2016-11-03 20:35
246 查看
这道题是一道比较经典的水题,重点在于理解同余方程。
只需利用数论的定理就能够很轻松的解决。
参见下列代码:
#include<cstdio> #include<cstring> #include<iostream> #include<cstdlib> using namespace std; int exgcd(int a,int b,int &x,int &y){ if(b==0){x=1,y=0;return a;} int xx,yy; int g=exgcd(b,a%b,xx,yy); x=yy; y=xx-(a/b)*yy; return g; } void insolve(){ int a,b,c,x,y,k; scanf("%d%d",&a,&b); //ax+by==1 b=-b,c=1; //转化为ax-by==c; int g=exgcd(a,b,x,y); //得到一组解 //此题保证有解,不考虑c%g!=0 int x0=c/g*x,y0=c/g*y; //接下来只需考虑如何得到最小正整数解 //通式:x0+k*b/g; int exb=b/g; k=-x0/exb; if(exb>0) if(k*exb<-x0) k++; if(exb<0) if(k*exb<-x0) k--; printf("%d\n",x0+k*exb); } int main(){ insolve(); return 0; }
相关文章推荐
- 【NOIP2012提高组】同余方程 (扩展欧几里得算法)
- 洛谷P1082 同余方程 [2012NOIP提高组D2T1] [2017年6月计划 数论06]
- C++——拓展欧几里得模板——同余方程【NOIP2012提高组】
- [NOIP2012] 提高组 洛谷P1082 同余方程
- NOIP 2012 提高组 复赛 day2 mod 同余方程
- [NOIP2012提高组] CODEVS 1200 同余方程(扩展欧几里德算法)
- NOIP2012复赛提高组day2(A:同余方程 B:借教室 C:疫情控制)
- NOIP提高组 2012 同余方程
- 扩展欧几里得模板(洛谷1082 同余方程NOIP 2012 提高组 第二天 第一题)
- 【NOIP】提高组2012 同余方程
- [NOIp2012提高组]同余方程
- codevs 1200 同余方程 2012年NOIP全国联赛提高组 x
- NOIP 2012 提高组 借教室
- 【NOIP 2012 Day2 T1】同余方程(扩展欧几里得)
- codevs1200 同余方程 (2012年NOIP全国联赛提高组)拓展欧几里得
- [数论][扩展欧几里得算法][NOIP2012] 同余方程
- 【NOIP】提高组2012 vigenere密码
- [NOIP2012提高]借教室 题解(二分答案+差分)
- 【NOIP2012】洛谷1082 同余方程
- 【NOIP2012提高组】国王游戏