深圳网络营销推广案例,海外网站seo,idea 网站开发,长春cms建站 999999999 * math.log(999999999, 2) / 8 / 1024 ** 33.480509950621777所以这个数字本身就差不多需要3.5GB内存#xff0c;考虑到计算过程中需要存储临时结果#xff0c;还需要翻个两三倍吧而Python中的long可以到多少呢#xff1a;#define MAX_LONG_DIGITS \… 999999999 * math.log(999999999, 2) / 8 / 1024 ** 33.480509950621777所以这个数字本身就差不多需要3.5GB内存考虑到计算过程中需要存储临时结果还需要翻个两三倍吧而Python中的long可以到多少呢#define MAX_LONG_DIGITS \((PY_SSIZE_T_MAX - offsetof(PyLongObject, ob_digit))/sizeof(digit))offsetof算出来的是对象头大小很小digit是表示数字的每个“位”的字节数其实就是这个数字存放的数组的元素大小比如unsigned short单纯看内存的话可以大概到PY_SSIZE_T_MAX这个级别这个数字是C的size_t的最大值除以二若在64bit环境下怎么看都够用了但是呢这个数字算出来你只需要内存和时间就好但是打印出来就是另回事了因为还要转为10进制这时候光是算出来的字符串消耗的内存就是 999999999 * math.log(999999999, 10) / 1024 ** 38.381903162752934而且这个计算过程是非常慢的数字转10进制需要O(N)次除法每次O(N)。。。基本你是等不了的当然你也可以自己实现一个用10的幂的进制的形式存储的大数算法不过用纯python搞这事内存消耗也是很大的补充实际上就算只是计算一下这个算式也是很慢的你可以自己试一下在命令行敲入a 999999999 ** 999999999只计算不输出理论上如果你机器有个16G内存也是能算完的但是你打开win的任务管理器或者linux的top就可以看到内存涨的其实还是蛮慢的虽然Python在计算long的乘方用了快速幂(这个式子只需要几十次乘法)以及大数相乘用的那个O(N^1.58)的分治算法但是数字比较大的时候后者还是非常慢的[xtmac: ~ $] time python -c a 9999; a ** areal0m0.037suser0m0.015ssys0m0.018s[xtmac: ~ $] time python -c a 99999; a ** areal0m0.128suser0m0.105ssys0m0.019s[xtmac: ~ $] time python -c a 999999; a ** areal0m4.704suser0m4.671ssys0m0.028s[xtmac: ~ $]这个增长速度。。。大致你就认为没法算出来吧