2010-11-24 57 views
3

我正在使用前26個素數的乘積。這需要超過52位的精度,我相信這是雙倍可以處理的最大值,並且超過了十進制可以提供的28-29位有效數字。那麼,對數字進行乘法和除法的策略是什麼呢?使用大於最大十進制值的數字

此外,爲了實現這一目標,我將不得不跳過什麼樣的箍環?

第22張素數(最讓我可以在我的計算器一起乘而不落入科學模式)的產品是:

10,642,978,845,819,148,849,204,664,294,430 

過去四年的產品是

72,370,439 

當乘以一起時,我得到:

7.7023705133964511682328635583552e+38 

性能影響a在這裏尤其重要,因爲我們基本上試圖解決質數字符串比較解決方案在實踐中是否比直接比較字符更快的問題。促使此次調查的帖子是here。處理器針對浮點計算進行了優化;理想情況下,我想在任何解決方案中充分利用優化。

TIA!
James

PS:我確實有的代碼是針對競爭解決方案的;我不認爲素數解決方案可能會更快,但我試圖給它一個最公平的機會。

回答

6

您可以在C#4.0中使用BigInteger。對於舊版本,我認爲你需要一個開源的庫,如this one

+0

我可以在4.0中做到這一點,我還沒有玩過它,但那將是完美的。你鏈接到的圖書館是非常令人印象深刻的......我很驚訝它自2002年以來沒有更新,但可能沒有需要。我會檢查來源。非常好! – 2010-11-24 20:02:13

+0

@James:給定的鏈接只是一個例子,告訴你在開源網站中有很多優秀的開源庫。下次你需要一些圖書館時,試着找到一個。 – 2010-11-25 02:16:56

0

我讀了你鏈接到的帖子,關於面試問題。既然你只是將這些大整數相乘並劃分,那麼優化就是讓它們保持素數分解的形式。每個大整數是一個數組[0..25]的整數,每個元素表示分解中第n個素數的指數。要以這種形式乘以兩個大整數,只需逐個添加指數;除以指數。

但你會看到這相當於在兩個字符串上列表字符計數。

相關問題