2012-04-02 70 views
0

我想計算長1長整數儘可能快。2長長整數的LCM

對於離 A = 10^18 B = 10^17

我正在做LCM(A,B)= A * B/GCD(A,B)爲整數 但對於長長的會有溢出

應該是什麼最快的方法來計算它?

+2

爲什麼不'a *(b/gcd(a,b))'? – 2012-04-02 01:38:44

+0

您是否有效地詢問「我何時需要使用'多精度'庫,以及如何最好地利用'long long'來避免這種開銷」?或者你有一些值溢出可以嗎? – gbulmer 2012-04-02 01:49:15

回答

8

你總是會遇到溢出問題,特別是當你有大的副數時。但爲了彌補這一點,你可以像邁克爾建議的那樣寫a * (b/gcd(a,b))。由於gcd(a,b)ab的除數,所以不用擔心由於整數除法導致的結果不準確。

0
a*b <= c 
// When will a*b overflow c? 
a > c/b 

在你的情況下,c可以是LLONG_MAX