SSブログ

[Algo]和と積から元の2数の算出 [Programming Algorithm]

[はじめに]
(1)ある2数の和と積から、元の2数を求めるアルゴリズムです。
   例えば、『足して5』、『掛けて6』になる2つの数は、
   になります。
   これを解くアルゴリズムとして、
   2次方程式の解の解法を利用することができます。

   具体的には、
   Xについての2次方程式
   2-5X+6=0 は因数分解すると、
   (X-2)(X-3)=0 となり、
   解はX=2、3 となります。

   つまり、
   2-(α+β)X+αβ=0 の解が、
   X=α、β となることを利用することで、
   元の2数を求めることができます。

   α+β=Aαβ=Bとした時、
   2次方程式の解の公式から、
   2-AX+B=0 
   X= {A±(A2 - 4B)1/2} / 2 となり、 
   求める2数は、
   X= {A+(A2 - 4B)1/2} / 2 と
   X= {A-(A2 - 4B)1/2} / 2
   となります。

   また、2次方程式の判別式が負数の場合、
   つまり2次方程式の実数解が存在しない場合は、
   元の2数が存在しないので、解を算出する前にチェックする必要があります。

[参考]2次方程式の解の公式
E784A1E9A18C.jpg
[ソース]
''' <summary>
''' 和(α+β)と積(α×β)から、αとβを算出する。
''' </summary>
''' <param name="sum">和(α+β)</param>
''' <param name="product">積(α×β)</param>
''' <returns>αとβ(存在しない場合はNothing)</returns>
''' <remarks></remarks>
Public Shared Function CalcValueBySumProduct(ByVal sum As IntegerByVal product As IntegerAs Decimal()
    'α、βの算出に
    '2次方程式の解の公式を利用する。
    '   以下の2次方程式を解くと、X=α、βになることを利用して、
    '   X*X - (α+β)*X + α*β = 0
    '   を解く。
    '   X= [(α+β)±√{(α+β)*(α+β) - 4*α*β}] / 2
    '補足
    '   実数解が存在しない場合は、解が存在しないものとする。
    Dim dist As Decimal = sum * sum - 4 * product

    If dist < 0 Then
        Return Nothing
    End If

    Dim sqrtDist As Decimal = Math.Sqrt(dist)
    Dim rtnValue() As Decimal = New Decimal(1) {}
    rtnValue(0) = (sum - sqrtDist) / 2
    rtnValue(1) = (sum + sqrtDist) / 2

    Return rtnValue
End Function
[VB.NET]和と積から元の2数を算出する。

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。