2014-09-13 25 views
1

如何檢查C++中很長的數字的可分性? 我必須檢查是否(3 * N * N + 3 * N-1)是由2,3和5Ñ整除可高達10^10所以長長整型可疑工作雖然我試着這樣做:如何檢查C++中很長的數字的可分性?

unsigned long long int gg4,l; 
gg4=(3*n*n+3*n-1); 
if(gg4%3==0){ 
    gg4=gg4/3; 
} 
if(gg4%2==0){ 
    gg4=gg4/2; 
} 
if(gg4%5==0){ 
    gg4=gg4/2; 
} 

但我猜是因爲正,請幫助範圍的這不會工作! :)

在這之後我還需要鴻溝(3 * N * N + 3 * N-1)由因子,請幫助!

+2

它永遠不會被2整除的,因爲無論是'3 * N * N'是奇數還是'3 * N-1'是奇數。它永遠不會被3整除。那隻剩下了5。 – harold 2014-09-13 10:54:00

+0

是'if(gg4%'**'5' **'== 0)gg4 = gg4 /'**'2' **錯誤類型? – GingerPlusPlus 2014-09-13 10:55:52

+1

範圍是一個問題。 10^10需要〜33位,所以n * n需要〜66位。 – 2014-09-13 11:23:00

回答

3

要在我的評論擴大,有兩種情況時(3*n*n+3*n-1) % 5 == 0,即

  • n = 5 * m + 1
  • n = 5 * m + 3

對於m整數。

所以實際上你不需要計算任何東西,你可以直接使用n,甚至從不計算3 * n * n + 3 * n - 1

只是檢查:

n % 5 == 1 || n % 5 == 3 
+0

那麼作爲一套作業是一個誤導?有誰會想過。 – 2014-09-13 11:23:53

+0

因此,只需檢查最後一位數是「1」,「3」,「6」還是「8」。 – Jarod42 2014-09-13 15:15:53