模方程
来源:互联网 发布:泛型 java 编辑:程序博客网 时间:2024/05/18 18:45
不定方程
定义
给出一个方程ax+by=c,求x,y。
方法
不难发现,如果(a,b)不|c,肯定是无解的,因为ax+by是(a,b)的倍数,但是c不是(a,b)的倍数,所以ax+by≠c。
(a,b)|c时,我们会联想到这么一个方程:
ax+by=(a,b)
这显然就是扩展欧几里得算法的经典问题,我们很容易就可以求出一组x,y。然后我们会发现x0=x*c/(a,b),y0=y*c/(a,b)肯定就是一组解。
模方程
定义
给出一个方程ax≡c(mod b),求x。
方法
转化一下就可以得到ax+by=c,那么就变成了不定方程,稍有不同的是,我们不用管y。设d=(a,b),同理得到x0=x*c/d是一个解。
但是很多时候我们都想要最小正整数解。对于这个问题我们可以先算出解的最小正间隔,但什么是最小正间隔呢?
最小正间隔就是一个可行解和另一个可行解的最小间距,可以把最小正间距设出来,然后分析:
设dis为最小正间距,x0是一组可行解,则a(x0+dis)≡c(mod b)
将此式与ax0≡c(mod b)相减,可以得到:
a*dis≡0(mod b)即a*dis mod b=0
显然dis的最小值就是b/(a,b)=b/d(设a的质因子集合为A,b的质因子集合为B,则d的质因子集合为A∩B,即a有b也有的质因子集合,所以b/d的质因子集合为{x∈素数集合|x∉A且x∈B},即为最优解)
ps:推出最小正间距之后,不难发现x0+k*b/d,k∈Z就是所有解。
再ps:对于不定方程,显然x0+k*b/d,y0-k*a/d,k∈Z就是所有解。
算出最小正间距之后,我们就可以算出最小正整数解了。对于x0这个解,不停减去最小正间距dis即可(当然不要真的拿来减,取模即可),但是问题就是x0可能是负数,其实不难推出通项公式:(x0%dis+dis)%dis。
运用
模方程在许多定理中都有出现,用扩展欧几里得求解就特别简单了。
- 模方程
- hdu4569 模方程求根
- 求解线性模方程
- uva11916(数学题,模方程)
- 线性模方程求解
- 方程
- 方程
- 方程
- HDU 3579 模余方程
- POJ 2115 线性模方程
- gcd欧几里得,线性模方程
- POJ 2065 高斯消元+线性模方程
- 扩展欧几里得求模方程的解
- 同余问题之模方程模板
- UVA - 1426 Discrete Square Roots (模方程)
- POJ 2947 (高斯消元解同模方程)
- NOIP 2014 解方程 [模运算][哈希?]
- 孙子定理,模线性同余方程
- 纯CSS开发的气泡式提示框-----------只需要一个class
- 字符串_hash
- Unity说明文档翻译-Asset Workflow
- 如何参与linux 内核开发
- VMware虚拟机nat模式连不上网
- 模方程
- 自定义VIEW②绘制流程
- Android跳转到通讯录获取用户名称和手机号码
- JavaSE 学习参考:二维数组定义
- Leetcode刷题记——Trapping Rain Water(捕获雨水)
- 通过ICE接口对hbase进行文件操作
- 微信公众号文章采集 爬取微信文章 采集公众号的阅读数和点赞数?
- OSPF的LSA类型详解
- 小白初用Redis