How can I test for primality?

前端 未结 16 2208
南方客
南方客 2020-12-05 08:29

I am writing a little library with some prime number related methods. As I\'ve done the groundwork (aka working methods) and now I\'m looking for some optimization. Ofcours

16条回答
  •  臣服心动
    2020-12-05 08:38

    This works very fast for testing primes (vb.net)

    Dim rnd As New Random()
    Const one = 1UL
    
        Function IsPrime(ByVal n As ULong) As Boolean
            If n Mod 3 = 0 OrElse n Mod 5 = 0 OrElse n Mod 7 = 0 OrElse n Mod 11 = 0 OrElse n Mod 13 = 0 OrElse n Mod 17 = 0 OrElse n Mod 19 = 0 OrElse n Mod 23 = 0 Then
               return false
            End If
    
            Dim s = n - one
    
            While s Mod 2 = 0
                s >>= one
            End While
    
            For i = 0 To 10 - 1
                Dim a = CULng(rnd.NextDouble * n + 1)
                Dim temp = s
                Dim m = Numerics.BigInteger.ModPow(a, s, n)
    
                While temp <> n - one AndAlso m <> one AndAlso m <> n - one
                    m = (m * m) Mod n
                    temp = temp * 2UL
                End While
    
                If m <> n - one AndAlso temp Mod 2 = 0 Then
                    Return False
                End If
            Next i
    
            Return True
        End Function
    

提交回复
热议问题