Java实现算法导论中求解模线性方程解(基于最大公约数欧几里得扩展算法)
2016-11-28 10:56
756 查看
基于最大公约数欧几里得扩展算法求解算法导论中模线性方程解。具体要结合算法导论中的有关数论算法章节理解,具体代码如下:
执行结果:
package cn.ansj; /* 假设方程ax=b(mod n)有解,且x0是方程的任意一个解, 则该方程对模n恰有d个不同的解(d=gcd(a,n)),分别为:xi=x0+i*(n/d) mod n 。 */ public class ModularLinearEquation { static int x,y; public static int extend_gcd(int a, int b){ if (b == 0){ x = 1; y = 0; return a; } int re = extend_gcd(b, a % b); int tmp = x; x = y; y = tmp - a / b * y; return re; } public static void main(String args[]) { int a=777; int b=66; int n=6; int d=extend_gcd(a,n); System.out.println("最大公约数d="+d+" And x="+x+" And y="+y); if(b%d!=0) System.out.println("no solution"); else{ int x0=x*(b/d)%n; System.out.println("x0="+x0); for(int i=1;i<d;i++) System.out.println("solution:"+(x0+i*(n/d))%n); } } }
执行结果:
最大公约数d=3 And x=1 And y=-129 x0=4 solution:0 solution:2
相关文章推荐
- Java实现算法导论中最大公约数欧几里得算法
- java实现最大公约数和最小公倍数(每天一道算法题)
- 算法导论 4.1-5 最大子数组问题 线性时间算法 C++简单实现
- Python实现的求解最大公约数算法示例
- Python基于更相减损术实现求解最大公约数的方法
- 基于算法导论6.5用最大堆实现的优先队列(C++)
- [ACM] POJ 2115 C Looooops (扩展欧几里得求解模线性方程)
- 欧几里得求最大公约数--JAVA递归实现
- Java 求解最大公约数的四种常见算法
- 算法导论4.1-3~4.1-5最大子数组暴力算法和递归算法的实现和线性时间算法实现
- Java实现算法导论中线性规划单纯形算法
- Java实现算法导论中线性规划单纯形算法
- Java求解两个非负整数最大公约数算法【循环法与递归法】
- 三种算法求最大公约数——Java实现
- java实现多种方式求解最大公约数
- 欧几里得求两个整数最大公约数算法的汇编递归实现代码
- Euclid算法求最大公约数--java实现
- Java实现最大公约数的算法代码
- POJ 2115 C Looooops 模线性方程(扩展欧几里得)
- 实用算法实现-第 25 篇 最大公约数