数论学习笔记
ExGCD:
目的:求形如
有解判断:
方程有解的充要条件是
问题简化:
将问题简化为求
思路及证明:
使用递归的思想减小A和B的值,直至方程变为
已知:
考虑:
然后寻找
将
由于我们只需要每个递归状态的一组解即可,所以我们可以直接使用
进行递归,得到一组特解。
求通解:
已知:
两式做差:
设
则:
得通解:
例题:
青蛙的约会
本题需要求出x的最小正整数解,可以采用
#include<bits/stdc++.h> #define int long long using namespace std; int x, y; int exgcd(int a, int b){ if (b == 0){ x = 1;y = 0;return a; } int g = exgcd(b, a%b); int tmp = x; x = y; y = tmp - a / b * y; return g; } signed main(){ int x0, y0, m, n, l;cin>>x0>>y0>>m>>n>>l; int g = exgcd(m - n, l);//方程形如(m-n)x+ly=(y0-x0) if((y0 - x0) % g) cout<<"Impossible"<<endl; else{ x *= (y0 - x0) / g; l = abs(l / g); x = (x % l + l) % l; cout<<x<<endl; } return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!