- 主题:print(2**(10**10)),pycharm没有输出
大佬, 分享一下你的代码啊。我用如下代码
import gmpy2
print(gmpy2.mpz(2)**(10**9))
也只计算出了 2**(10**9),如果是2**(10**10),同样会报错。 2**(10**9)的计算结果如下,大家可以看看结果是不是一样的:
前几位是:4398282079208540005159421318391706644699765194388594973565462303684433729905554443830043984407181821079925003
最后面的几位是:3834591063914659350598833620642843023291606821041787109376
pycharm的输出窗口,明显有卡顿。大家有兴趣的,可以算算看,结果是否一样?
但还是有个问题啊:算出来的结果是 1048540位,但是估算的话:
2**(10**9) = (2**10)**(10**8) 约等于 (10**3)**(10**8),应该有10**8,一亿位啊。是我估算错了吗?谢谢
【 在 pgw 的大作中提到: 】
不要转换成串来输出,用to_bytes,我这里这个大整数占用1.25G内存。
--
FROM 120.242.251.*
都说了不要输出整个整数,转换成串不仅耗时间还耗内存。
只有8G内存,就不整2**(10**10)了。
>>> from math import log10
>>> n=2**(10**9)
>>> log10(n)
301029995.6639812
>>> x=divmod(n, 10**100)
>>> x[1]
8277822505291506349960972398725143913806843834591063914659350598833620642843023291606821041787109376
>>> exit()
【 在 feng321 的大作中提到: 】
: 大佬, 分享一下你的代码啊。我用如下代码
: import gmpy2
: print(gmpy2.mpz(2)**(10**9))
: ...................
--
FROM 27.186.196.*
有意思,我在mac的term上试了试,发现报错
$ python3
Python 3.11.1 (v3.11.1:a7a450f84a, Dec 6 2022, 15:24:06) [Clang 13.0.0 (clang-1300.0.29.30)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print(2**(10**10))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Exceeds the limit (4300) for integer string conversion; use sys.set_int_max_str_digits() to increase the limit
然后计算了数字的位数,得有3010299957
但是无法设置这么长的字符串
>>> sys.set_int_max_str_digits(3010299956)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: Python int too large to convert to C int
【 在 feng321 的大作中提到: 】
: 跑了一晚上,pycharm没有输出,也没有报错,是什么情况?再大一点,就报 MemoryError了。有大佬知道吗?是不是算出来了,但是pycharm的控制台没法输出啊?感觉内存占用也不大,才600m+
--
修改:littleSram FROM 8.219.207.*
FROM 8.219.207.*
import gmpy2
print(gmpy2.mpz(2)**(10**9))
奇怪的是,我用gmpy,似乎可以算这个整数。但是输出的位数,和我估计的位数,不一致。不知道什么原因?
【 在 littleSram 的大作中提到: 】
: 有意思,我在mac的term上试了试,发现报错
: $ python3
: Python 3.11.1 (v3.11.1:a7a450f84a, Dec 6 2022, 15:24:06) [Clang 13.0.0 (clang-1300.0.29.30)] on darwin
: ...................
--
FROM 120.242.251.*
你是用什么方法 精确计算出这个数的位数的?10亿位啊
【 在 littleSram 的大作中提到: 】
: 有意思,我在mac的term上试了试,发现报错
: $ python3
: Python 3.11.1 (v3.11.1:a7a450f84a, Dec 6 2022, 15:24:06) [Clang 13.0.0 (clang-1300.0.29.30)] on darwin
: ...................
--
FROM 120.242.251.*
能算多大整数,查一下python整数计算的实现原理就知道了啊,至于这样试吗
【 在 feng321 的大作中提到: 】
: 我就想知道,普通python,能计算的最大整数是多少?(不用任何包的,python3.9),感觉1w+位都是小意思(十进制的)。
--
FROM 115.171.245.*
>>> print(len(str(2**1000)))
302
>>> math.log10(2**1000)
301.0299956639812
>>> int(math.log10(2**1000))
301
【 在 feng321 的大作中提到: 】
: 你是用什么方法 精确计算出这个数的位数的?10亿位啊
--
FROM 8.219.207.*
【 在 feng321 的大作中提到: 】
: 我就想知道,普通python,能计算的最大整数是多少?(不用任何包的,python3.9),感觉1w+位都是小意思(十进制的)。
计算机能算多大整数只和计算机的硬件资源有关,
和使用什么计算机语言无关, 通用计算机语言一般也不会设置限制,
只需要实现相应的数据结构和算法都能做到,
这是程序员该干的分内事情
--
FROM 124.126.2.*
sys.maxsize
你的感觉可能不对
【 在 feng321 的大作中提到: 】
: 我就想知道,普通python,能计算的最大整数是多少?(不用任何包的,python3.9),感觉1w+位都是小意思(十进制的)。
--
FROM 61.149.143.*
能计算 和 能 print 出来,是两码事
你有个错觉,觉得计算机能表示一个大数,就应该能(瞬间)显示、(瞬间)循环这么
多次数,然后和你错觉不符,你就不满意,就用什么 taichi,还不行就发帖问。
其实慢就慢在显示和循环上,人家算的可正常了。
【 在 feng321 的大作中提到: 】
: 我就想知道,普通python,能计算的最大整数是多少?(不用任何包的,python3.9),感觉1w+位都是小意思(十进制的)。
--
FROM 221.217.52.*