将vb.net代码转换为python用于教育目的。输出未出现的数值

时间:2009-09-08 15:43:48

标签: python vb.net

我的日常工作主要是在vb.net中编码,所以我对它非常熟悉。在做我最初的几十个项目euler问题时,我使用vb.net来解决问题风格。现在我想使用项目euler来帮助我学习一门新语言,并且已经在python中运行了一对。然而。我遇到了麻烦。

以下代码将打印给定数字的最大素数因子:

Protected Function isPrime(ByVal n As Long) As Boolean
    If n = 2 Then
        Return True
    End If
    If n Mod 2 = 0 Then
        Return False
    End If

    Dim maxFactor As Long = Math.Sqrt(n)
    Dim i As Integer = 3
    While i <= maxFactor
        If n Mod i = 0 Then
            Return False
        End If
        i = i + 2
    End While
    Return True
End Function

Protected Sub LargestPrimeFactor(ByVal n As Long)
    Dim factor As Long = Math.Sqrt(n) ''#largest factor of n will be sqrt(n)
    While factor > 2
        If (n Mod factor) = 0 Then
            If isPrime(factor) Then
                Me.lblAnswer.Text = factor
                factor = 0
            End If
        End If
        factor = factor - 1
    End While
End Sub

此vb.net代码运行完美。 python中的等价物,我相信是:

from math import sqrt

    def IsPrime(n):
        if n==2: return true
        if not n % 2: return false

        maxFactor = sqrt(n)
        i = 3
        while i <= maxFactor:
            if not n % i: return false
            i += 2
        return true

    n = 600851475143
    factor = sqrt(n)
    while factor > 2:
        if not n % factor:
            if IsPrime(factor):
                print factor
            factor = 0
        factor -= 1

然而,该因素永远不会结束印刷。我错过了蟒蛇的细微差别吗?我哪里可能出错了?谢谢:))

1 个答案:

答案 0 :(得分:2)

以前的解决方案会产生错误的答案。

  1. VB.net代码对整数进行操作,而你的Python代码在浮点数上运行,这显然在某处失败。
  2. 如前所述,关键字大写(True / False)。
  3. 您可以毫无问题地使用foo%bar == 0。
  4. 您在“factor = 0”行中错过了一级缩进。
  5. 此代码生成正确的答案,6857:

    from math import sqrt
    
    def IsPrime(n):
        if n==2: return True
        if n % 2 == 0: return False
    
        maxFactor = long(sqrt(n))
        i = 3
        while i <= maxFactor:
            if n % i == 0: return False
            i += 2
        return True
    
    n = 600851475143
    factor = long(sqrt(n))
    while factor > 2:
        if n % factor == 0:
            if IsPrime(factor):
                print factor
                factor = 0
        factor -= 1