Python显示整数?

时间:2016-05-28 20:53:28

标签: python python-2.7 long-integer

所以这里有两个函数来查找数字的素因子。 致谢:三联画 https://stackoverflow.com/a/412942/6211963

def prime_factors1(n):
    """Returns all the prime factors of a positive integer"""
    factors = []
    d = 2
    while n > 1:
        while n % d == 0:
            factors.append(d)
            n /= d
        d = d + 1

    return factors

def prime_factors2(n):
    """Returns all the prime factors of a positive integer"""
    factors = []
    d = 2
    while n > 1:
        while n % d == 0:
            factors.append(d)
            n /= d
        d = d + 1
        if d*d > n:
            if n > 1: factors.append(n)
            break
    return factors        

显然第二个代码的运行速度要快得多,但为什么它输出的最大因子是long-type而不是int?

>>> prime_factors1(65126264424)
[2, 2, 2, 3, 13, 29, 7197863]

>>> prime_factors2(65126264424)
[2, 2, 2, 3, 13, 29, 7197863L]

1 个答案:

答案 0 :(得分:5)

区别如下。在prime_factors1(n)中,最后一个因素附加在此处:

while n > 1:
    while n % d == 0:
        factors.append(d)

其中d始于2(无论在哪个运行时间,肯定是int),通过d = d + 1增加(增加两个int)和 - 当它作为因素附加时 - 代表7197863(仍为int)。

但是,在prime_factors2(65126264424)中,您在此处附加最后一个因素:

if d*d > n:
    if n > 1: factors.append(n)

其中n65126264424开始,并通过n /= d缩小。如果nlong开头(nlongdint,则不会更改long的类型,无论多小,结果仍然是65126264424。因此,问题变为: long(2**31 - 1)吗?

答案取决于你的python运行时:

  1. 在32位运行时中,通常有32位整数,最大值为214748364765126264424,小于(2**63 - 1)
  2. 在64位运行时中,通常有64位整数,其最大值为922337203685477580765126264424,大于sys.maxint
  3. 查看65126264424的输出,它应小于 public function sanitizeString($string){ $sanitized_string = htmlentities(mysqli_real_escape_string($this->conn, trim($string))); return $sanitized_string; }