【发布时间】:2009-09-08 15:43:48
【问题描述】:
我的日常工作主要是在 vb.net 中编码,所以我对它非常熟悉。在处理我最初的几十个项目欧拉问题时,我使用 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
但是,该因素永远不会最终打印出来。我错过了python的细微差别吗?我可能哪里出错了?谢谢:)
【问题讨论】: