我試圖建立一個C++程序,可以解決所述模塊化一致性:最小非負殘渣:大數
Ñ^ P = X(模q)的,
其中n是一個很小的數字,p和q是非常大的任意素數。我試過多次這樣做,但我總是遇到內存溢出問題。任何幫助表示讚賞。
我試圖建立一個C++程序,可以解決所述模塊化一致性:最小非負殘渣:大數
Ñ^ P = X(模q)的,
其中n是一個很小的數字,p和q是非常大的任意素數。我試過多次這樣做,但我總是遇到內存溢出問題。任何幫助表示讚賞。
有一個簡單的算法b^ë(MOD米):
function powerMod(b, e, m)
x := 1
while e > 0
if e % 2 == 1
x := (b * x) % m
b := (b * b) % m
e := e // 2 # integer division
return x
你應該不計算b^Ë,然後執行模運算,因爲中間數字會很大。我會把它留給你來翻譯成你的首選語言,用數據類型來存儲你需要的大數字。我在my blog討論這個算法。
看看你對你的問題的評論,這聽起來像你試圖將非常大的值推入變量,無法保存大的值。
看看這裏的有關數據類型和範圍的詳細信息,他們可以容納:
http://msdn.microsoft.com/en-us/library/s3f49ktz(v=vs.110).aspx
我發現與非負數最大的數據類型範圍爲unsigned long long
。它具有從0到18,446,744,073,709,551,615的值範圍。
你能顯示你的源代碼嗎? – suspectus
也許吧。我可以檢查它是否仍然可以辨認。這將需要一秒,但因爲我在Mac上並行運行Windows Server。 – Trancot
我說「可譯」,因爲代碼存儲的地方只是衆多無關代碼塊中的一個,它們全部註釋掉了。這是因爲它只是一個測試.cpp文件,所以我在一個.cpp文件中有一堆註釋掉的程序。那有意義嗎? – Trancot