2012-12-09 90 views
0

我想做一個動態Collat​​z算法,但似乎有不正確的答案,至少超過626331或更高。所有其他人似乎是正確的。我一直在這個小時工作,不能弄清楚我的問題是什麼。任何人都可以給我一個建議來幫助。感謝Collat​​z動態算法

int DynamicCollatz::DynCollatzConjecture(__int64 n) 
+2

我懷疑整數溢出。 'int's不是無限大小。 – zch

回答

4

由在Collat​​z算法值626331產生的最大值是:

o = 626331 m = 7222283188 c = 508 

該數字是整齊大於將裝配到一個32位(無符號)int。 (該c是拍攝去1中的步驟計)

我用這個bc腳本(這是我藏起來,因爲在Collat​​z算法變成了上所以大多數年)推斷出信息:

define collatz(n) { 
    if (n<=0) halt; 
    m=n;o=n;c=0; 
    while(n>1){ 
     if(n%2)n=n*3+1 else n/=2; c=c+1; 
     if(n>m)m=n; 
    } 
    print "o = ",o," m = ",m," c = ",c,"\n"; 
} 

collatz(626331) 
+0

謝謝你的幫助。我曾嘗試將數據類型更改爲較長,但仍存在問題。我終於可以通過將數據類型更改爲__int64來糾正問題。謝謝!! – JonDog