14

我正在编写一个简单的算法来检查整数的素数,但在将这个 Java 代码翻译成 Python 时遇到了问题:

for (int i = 3; i < Math.sqrt(n); i += 2) {
    if (n % i == 0)
        return false;
}

所以,我一直在尝试使用它,但我显然跳过了 3 的除法:

i = 3
while (i < int(math.sqrt(n))):
    i += 2  # where do I put this?
    if (n % i == 0):
        return False
4

4 回答 4

22

forPython 中唯一的循环在技术上是一个“for-each”,所以你可以使用类似的东西

for i in xrange(3, int(math.sqrt(n)), 2):  # use 'range' in Python 3
    if n % i == 0:
        return False

当然,Python 可以做得更好:

all(n % i for i in xrange(3, int(math.sqrt(n)), 2))

也将是等效的(假设return true在该 Java 循环的末尾有 a )。事实上,后者将被认为是接近它的Pythonic方式。


参考:

于 2013-07-01T23:26:34.410 回答
4

直接翻译是:

for i in range(3, int(math.sqrt(n)), 2):
    if n % i == 0:
        return False
于 2013-07-01T23:26:38.723 回答
2

在 Java for 循环中,步骤(i += 2您的示例中的部分)发生在循环结束时,就在它重复之前。转换为一段时间,您的 for 循环将相当于:

int i = 3;
while (i < Math.sqrt(n)) {
    if (n % i == 0) {
        return false;
    }
    i += 2;
}

在 Python 中是类似的:

i = 3
while i < math.sqrt(n):
    if n % i == 0:
        return False
    i += 2

但是,您可以使用 Python 的xrange函数使其更“Pythonic”并且更易于阅读,该函数允许您指定step参数:

for i in xrange(3, math.sqrt(n), 2):
    if n % i == 0:
        return False
于 2013-07-01T23:30:38.987 回答
1

使用基本的 Pythonfor i in range循环:

for i in range(3, math.round(math.sqrt(x)), 2):
    if (n % i == 0):
        return false
于 2013-07-01T23:26:41.083 回答