簡體   English   中英

計算非常大的指數的最佳方法是什么?

[英]What is the best way to compute very large exponents?

我是 Python 的新手,我正在嘗試解決一個編程問題,我必須計算 5 的 n次方,一旦我有了這個,我只需要 output 該數字的最后兩位數。 這是我在下面寫的代碼:

print(str(pow(5, int(input())))[-2:])

該代碼在大多數情況下工作正常,但當輸入為1000000000000000000之類的大數字時,超過了 500 毫秒的時間限制

在不超過時間限制的情況下處理如此大的輸入作為指數的最有效方法是什么?

可以通過歸納法證明 5^n mod 100 = 25,對於所有 n >= 2。這在 n = 2 時很明顯。假設 5^n 的形式為 100k+25。 然后 5^(n+1) = 100(5k+1)+25,因此 5^(n+1) mod 100 = 25。因此,對於所有 n >= 2,5^n 的最后兩位數是 25 .

一些有效計算 a^n mod b 的通用技巧包括重復平方計算 a^n,以及在每個步驟中計算余數以使數字保持較小。

對於這些繁重的計算,您可以使用多處理來使用 CPU 內核同時將計算分解為少量計算。 例如(dummy example)我們知道 5^4 等於 625。所以我們可以使用 2 個 CPU 核心計算 5^2,然后乘以結果。 5^2 * 5^2 = 625。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM