二元一次不定方程的大衍求一术解法的VB源码
我们清楚,二元一次不定方程可用欧几里德扩展算法,或者同余方程的欧拉解法,以及中国传统的方法大衍求一术来解。同余方程的欧拉解法程序算法复杂,且需经递归。而欧几里德扩展算法如果不递归,则也需要进行回退求解。所以,只有大衍求一术才是最简单的算法。这是08年就写出的老代码了,VB6的源码。从本人其它博客现搬到iteye.com网站,分享给更多的人。以下是VB程序的源码。
Option Explicit
'visual basic source code for finding x, y such that linear diophantine equation
'Copyright: 2008 Bardo QI
Function gcd(ByVal a As Long, ByVal b As Long)
'get great common division
Dim c As Long, tmp As Long
If (a < b) Then
tmp = a
a = b
b = tmp
End If
Do While (b <> 0)
c = b
b = a Mod b
a = c
Loop
gcd = a
End Function
Function gma(ByVal g As Long, ByVal m As Long) As Long
'get special solution for linear diophantine: ax+by=1
Dim LT As Long, RT As Long, LD As Long, RD As Long
Dim tmp As Long, x As Long
If Abs(g) > Abs(m) Then
g = g Mod m
End If
LT = 1: LD = 0: RT = g: RD = m
x = 0
Do While (RT <> 1)
x = RD \ RT
RD = RD Mod RT
LD = x * LT + LD
x = RT \ RD
If RD = 1 Then
LT = (x - 1) * LD + LT
RT = 1
Exit Do
Else
RT = RT Mod RD
End If
LT = x * LD + LT
Loop
gma = LT
End Function
Function Diophantine(ByVal a As Long, ByVal b As Long, ByVal c As Long, _
x As Long, y As Long, ar As Long, br As Long) As Boolean
'Find the x,y such that a*x + b*y = k*gcd(a,b)
Dim g As Long, tmp As Long, x0 As Long, y0 As Long
Dim am As Long, bm As Long, t As Long
g = gcd(Abs(a), Abs(b))
If (c Mod g <> 0) Then
Diophantine = False: Exit Function
End If
If a < 0 Then
a = -a: b = -b: c = -c
End If
br = a / g: ar = b / g
am = br: bm = ar
If ar > br Then
bm = ar Mod br
End If
If am > bm Then
y0 = gma(Abs(bm), Abs(am))
Else
y0 = 1
End If
If (b < 0) Then
y0 = -y0
End If
x0 = (1 - ar * y0) / br
x = c * x0 / g: y = c * y0 / g
'let y to mininized value
t = y \ br
y = y Mod br
x = x + ar * t
ar = -ar
Diophantine = True
End Function
分享到:
相关推荐
说明:此程序公式为 a*x+b*y=c,输入a、b和c的值,即可计算x和y的值。 注意:a,b,c,x和y都为正整数! 声明:版权归 CSDN 用户“Schoolchild C++”所有,未经同意,不得转载,否则将视为侵权。
使用线性代数的线性方程解法解二元一次方程 欢迎斧正
二元一次方程求解 VB源码 VB源文件 .VBP
易语言源码二元一次方程组练习器易语言源码.rar 易语言源码二元一次方程组练习器易语言源码.rar 易语言源码二元一次方程组练习器易语言源码.rar 易语言源码二元一次方程组练习器易语言源码.rar 易语言源码二元一...
求解一元二次方程组的C++源代码,该代码可直接显示计算结果
二元二次方程组的解法二元二次方程组的解法二元二次方程组的解法
Java解二元一次不定方程[axbyc].doc
利用C++和Qt-library实现牛顿迭代法求二元一次方程,并以图形示意。
七年级数学下册第六章二元一次方程组6.2二元一次方程组的解法用整体思想解二元一次方程组素材新版冀教版
二元二次不定方程解法探讨.doc
解二元一次方程组的工具的源码,使用VB编写
vb6.0实现的解方程。原理:运用行列式的性质以及克莱姆法则解二元、三元一次线性方程组。欢迎大家下载,有不足之处请多多指导,谢谢!
该MATLAB程序用来解二元二次微分方程,而且可以解系数变化的二元二次微分方程,并能将结果直接显示在FIGURE图中
二元一次方程组的解
二元一次方程组vb demo和代码详解,vb简单的界面编程,代码简单
二元一次方程组求解
易语言源码用求根公式解二元一次方程易语言源码.rar 易语言源码用求根公式解二元一次方程易语言源码.rar 易语言源码用求根公式解二元一次方程易语言源码.rar 易语言源码用求根公式解二元一次方程易语言源码.rar ...
人教版初一数学下册:二元一次方程组解法(一)--代入法(提高) 巩固练习.doc
通过欧几里德原理求解二元一次方程正整数解的代码实现
七年级数学下册第六章二元一次方程组6.2二元一次方程组的解法例谈构造二元一次方程组解题素材新版冀教版