所以這個數字本身就差不多需要3.5GB記憶體,考慮到計算過程中需要儲存臨時結果,還需要翻個兩三倍吧
而Python中的long可以到多少呢:
offsetof算出來的是物件頭大小,很小,digit是表示數字的每個“位”的位元組數,其實就是這個數字存放的陣列的元素大小,比如unsigned short,單純看記憶體的話,可以大概到PY_SSIZE_T_MAX這個級別,這個數字是C的size_t的最大值除以二,若在64bit環境下,怎麼看都夠用了
但是呢,這個數字算出來你只需要記憶體和時間就好,但是打印出來就是另回事了,因為還要轉為10進位制,這時候光是算出來的字串消耗的記憶體就是:
而且這個計算過程是非常慢的,數字轉10進位制需要O(N)次除法,每次O(N)。。。基本你是等不了的
當然,你也可以自己實現一個用10的冪的進位制的形式儲存的大數演算法,不過用純python搞這事,記憶體消耗也是很大的
===================
補充:實際上,就算只是計算一下這個算式,也是很慢的,你可以自己試一下在命令列敲入:
只計算不輸出,理論上如果你機器有個16G記憶體也是能算完的,但是,你開啟win的任務管理器或者linux的top就可以看到,記憶體漲的其實還是蠻慢的,雖然Python在計算long的乘方用了快速冪(這個式子只需要幾十次乘法),以及大數相乘用的那個O(N^1.58)的分治演算法,但是數字比較大的時候後者還是非常慢的
這個增長速度。。。大致你就認為沒法算出來吧
所以這個數字本身就差不多需要3.5GB記憶體,考慮到計算過程中需要儲存臨時結果,還需要翻個兩三倍吧
而Python中的long可以到多少呢:
offsetof算出來的是物件頭大小,很小,digit是表示數字的每個“位”的位元組數,其實就是這個數字存放的陣列的元素大小,比如unsigned short,單純看記憶體的話,可以大概到PY_SSIZE_T_MAX這個級別,這個數字是C的size_t的最大值除以二,若在64bit環境下,怎麼看都夠用了
但是呢,這個數字算出來你只需要記憶體和時間就好,但是打印出來就是另回事了,因為還要轉為10進位制,這時候光是算出來的字串消耗的記憶體就是:
而且這個計算過程是非常慢的,數字轉10進位制需要O(N)次除法,每次O(N)。。。基本你是等不了的
當然,你也可以自己實現一個用10的冪的進位制的形式儲存的大數演算法,不過用純python搞這事,記憶體消耗也是很大的
===================
補充:實際上,就算只是計算一下這個算式,也是很慢的,你可以自己試一下在命令列敲入:
只計算不輸出,理論上如果你機器有個16G記憶體也是能算完的,但是,你開啟win的任務管理器或者linux的top就可以看到,記憶體漲的其實還是蠻慢的,雖然Python在計算long的乘方用了快速冪(這個式子只需要幾十次乘法),以及大數相乘用的那個O(N^1.58)的分治演算法,但是數字比較大的時候後者還是非常慢的
這個增長速度。。。大致你就認為沒法算出來吧