3

数xの最大の素数除数を見つけようとしています。xが10億より小さい場合、私のコードは機能しますが、10億より大きい場合、オーバーフローエラーが発生し、デバッグによってModが含まれる行が強調表示されます。

 Sub Largest_Divisor()
    Dim x As Double
    Dim Q As Integer
    Q = 0
    Dim L() As Double
    x = 999999999#
    Dim i As Double
    For i = 775145 To 3 Step -2
        If x Mod i = 0 Then
            If IsPrime(i) Then
                ReDim Preserve L(Q) As Double
                L(Q) = i
                Q = Q + 1
            End If
        End If
    Next i
    MsgBox (Application.Max(L))
 End Sub
4

2 に答える 2

5

問題があるのは、正確にxは約 20 億を超える場合だと思います。2,147,483,648

これは、 のドキュメントによるとmod、最大で alongが返されるためです。この値の範囲は、32 ビットの符号付き値としてから-2,147,483,648までです。2,147,483,647ヘルプ ドキュメントには明示的に記載されていませんが、 の引数も同様modに強制されている可能性がlongあります。

于 2012-11-01T02:26:30.610 に答える