2016-12-15 131 views
-5

我想在C++中進行大型數學運算。大型數學運算C++

long long h= 4294967295; 
long long d=7910266469; 
long long n=10021211227; 
long long result; 

我需要的計算是這樣的:

h^d mod n

result=pow(h,d) % n; 

我不知道哪種類型的using.Please幫我選擇型數字.. 感謝

+0

我使用的開發 - C++ –

+0

錯誤:結果必然是雙師型 –

+5

你應該做的數學第一。也許有一種數字類型可以讓你做'pow(h,d)',但是假設你只需要結果mod'n'你不需要'pow(h,d)'。可以肯定的是,你可以用'long long'來計算可用的身份,我只是不知道他們的心臟;) – user463035818

回答

1

this wikipedia article。 有一個很不錯的例子有以下內存效率的僞代碼:

function modular_pow(base, exponent, modulus) 
    if modulus = 1 then return 0 
    c := 1 
    for e_prime = 1 to exponent 
     c := (c * base) mod modulus 
    return c 

甚至還有beeing內存效率和使用更少的操作的例子。我認爲應該可以從中獲取C++代碼。

如果您使用此方法,您的解決方案的long long應該沒問題。


未經測試,但一個簡單的1:從上面的僞代碼1 ...翻譯

long long result = 1; 
int i; 
for(i=0; i<d;i++){ 
    result = (result * h) % n; 
} 
+0

此代碼其他編程語言我不好轉換爲C++。 –

+0

對不起我的英語 –

+0

也許我應該注意,對於大'd'來說,計算將會真的非常長 – izlin