P1082 [NOIP2012 提高组] 同余方程
1.uva253骰子涂色2.洛谷uva2203.uva12096集合栈计算机 The SetStack Computer4.uva101The Blocks Problem5.uva400 Unix Is命令 Unix ls6.uva10391 复合词 Compound Words7.小球下落 Dropping Balls (uva679)8.树的层次遍历 Trees on the level uva1229.树 Tree uva54810.天平 Not so Mobile uva83911.P1102 A-B 数对12.成最多水的容器13.P3367 【模板】并查集14.947. 移除最多的同行或同列石头
15.P1082 [NOIP2012 提高组] 同余方程
16.803 打砖块17.B3644 【模板】拓扑排序 / 家谱树18.U107394 拓扑排序模板19.P1137 旅行计划20.936 戳印序列21.P4017 最大食物链计数22.2050 并行课程 III23.P3366 【模板】最小生成树24.P2330 [SCOI2005] 繁忙的都市25.Abbott的复仇 Abbott's Revenge26.P1960 郁闷的记者27.P4391 [BOI2009] Radio Transmission 无线传输扩展欧几里得算法的应用,关于原理性的讲解这里就略去了,这边给出学习链接即模板。
int exgcd(int a,int b,int &x,int &y){ if (b==0){ x=1; y=0; return x; } int d=exgcd(b,a%b,x,y); x=y; y=d-a/b*y; return x; }
首先原题方程可以化简为 ax=by+1 即 ax-by=1(正负无所谓);
那么根据裴蜀定理我们可以得到得到该方程的一个特解,该解不一定是题目要求的最小正整数解。
此时我们对x批量的进行b的增减,原因如下:
ax+by=1;
ax+by+k*ab-k*ab=1;
a(x-kb)+b(y+ka)=1;
显然此时x-kb,y+ka仍为整数。
因此为了保证x0为最小整数,我们进行如下操作:
x=(x%b+b)%b
code
#include<bits/stdc++.h> using namespace std; int exgcd(int a,int b,int &x,int &y){ if (b==0){ x=1; y=0; return x; } int d=exgcd(b,a%b,x,y); x=y; y=d-a/b*y; return x; } int main(){ int x,y,a,b; cin>>a>>b; int m=exgcd(a,b,x,y); cout<<(m%b+b)%b; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】