【问题标题】:determining if random Int is prime or not确定随机 Int 是否为素数
【发布时间】:2016-12-18 20:44:32
【问题描述】:

当我需要确定一个数字 x 是否是素数时,我遇到了一个小问题。 x 将是一个随机生成的正整数,我在执行代码时收到以下消息:

Your function fails on is_prime(2). It returns None when it should return True.

我的代码:

def is_prime(x):
if x < 2:
    return False
else:
    for n in range(2, x):
        while x % n == 0:
            return False
            break
        else:
            return True

我希望 while 循环遍历 n == 2 直到 n == (x-1) 但它似乎没有这样做! 我做错了什么?

【问题讨论】:

  • “我希望 while 循环遍历 n == 2 直到 n == (x-1)” - 这不是 for 循环的工作吗?
  • 是的,我的意思是 for 循环对不起:)
  • 你为什么加入while循环?
  • 我解决了!是的,while循环是不必要的

标签: python integer int primes modulus


【解决方案1】:

你可以更简单地编写这个函数:

import math
def is_prime(n):
    if n % 2 == 0 and n > 2: 
       return False
    for i in range(3, int(math.sqrt(n)) + 1, 2):
        if n % i == 0:
           return False
    return True

因此,您对 is_prime(2) 的调用不会通过 if 测试,也不会在 for 运行中使用,只会返回 True。

如果其他素数大于 3 且不是偶数,则应测试它们。

【讨论】:

  • 我更喜欢 if (n % 2 == 0): return n == 2 甚至是 if (n &lt;= 2): return n == 2),这样可以节省一个 mod 和一个 sqrt。
猜你喜欢
  • 2012-09-18
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
  • 2019-06-24
  • 1970-01-01
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多