vb.net - 如何在没有 GCD 的情况下获得 2 个号码的 LCM?
问题描述
我正在尝试在 VB.NET 中制作分数计算器,但我坚持使用 LCM 部分。我在网上找到了一些代码:
Public Shared Function GCD(a As Integer, b As Integer) As Integer
If a = 0 Then
Return b
End If
Do While b <> 0
If a > b Then
a = a - b
Else
b = b - a
End If
Loop
Return a
End Function
Public Shared Function LCM(a As Integer, b As Integer) As Int64
Return Math.BigMul(Math.Abs(a), Math.Abs(b)) \ GCD(a, b)
End Function
但是当我尝试获取 LCM 时,它每次都会显示第二个数字!例如,当我尝试获得 2 和 3 的 LCM 时,它显示为 3。
没有 GCD 如何获得 LCM?
解决方案
在网上找到了这个
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim _lcm As Integer = lcm(140, 72)
_lcm = lcm(2, 3)
End Sub
Public Function lcm(a As Integer, b As Integer) As Integer
If a = 0 OrElse b = 0 Then
Return 0
End If
Dim _gcd As Integer = gcd(a, b)
Return CInt((a * b) / _gcd)
End Function
Public Function gcd(a As Integer, b As Integer) As Integer
If a < 1 Or b < 1 Then
Throw New ArgumentException("a or b is less than 1")
End If
Dim _a As Integer = Math.Max(a, b)
Dim _b As Integer = Math.Min(a, b)
Dim r As Integer = 0
Do
r = _a Mod _b
_a = _b
_b = r
Loop While _b <> 0
Return _a
End Function
推荐阅读
- java - Java <-> Angular Dto
- javascript - 使用 node.js 从 Spring Boot 2 响应中读取传入的 HTTPS 标头
- javascript - 如何在 PHP laravel 或 Java Script 中比较 3 个不同的数组
- javascript - 在 Javascript 中为几乎相同的输入获取不同的 typeof
- c++ - 如何在 C++ 中为 copy_if 等定义“一元谓词”?
- scala - 错误:未知参数“idea-shell”
- c# - 如何使用 serialPort DatatReceived 事件更改 tabControl 中的活动选项卡?
- asp.net - 将点击事件添加到日历内的动态按钮
- ruby-on-rails - Rails - 茧/简单表单嵌套字段未显示
- java - 对话流 startListening()