[問題] 3x+1問題

看板C_and_CPP作者 (wodada)時間13年前 (2010/09/25 04:14), 編輯推噓2(206)
留言8則, 4人參與, 最新討論串1/4 (看更多)
末學目前寫了一份關於3*X+1的數學問題 其數學內容為X(i+1)=(3*X(i)+1)/(2^Y) ps:(i+1)和(i)為下標 也就是說當X1帶入右式時,變成3*X(1)+1=X(2),X(3)、X(4)等以此類推 由於目前這數學只是個猜想,所以老師只要我們做出當X1<100的狀況 其中Y的值為使(2^Y)能整除3*X(i)+1的最大正整數。 例如:X(i)=3時,Y=1。當X(1)為任何正奇數時,數列會收斂到1。 例如:X(1)=3,X(2)=5,X(3)=1。 或者是:X(1)=7,X(2)=11,X(3)=17,X(4)=13,X(5)=5,X(6)=1。 程式可以不必一一輸出每一個數字的測試結果 在下用的DevC/C++版本 程式碼如下: #include <stdio.h> #include <stdlib.h> #include <math.h> void seqence(void) { int x= 99; int y[]= {1, 6, 1, 1, 2, 3, 4}; int i; printf("The x1 is: %d\n", x); for(i= 0; i<7; i++) { x= (3*x+ 1)/pow(2,y[i]); printf("The x%d is: %d\n", i+2, x); } } int main(int argc, char *argv[]) { seqence(); system("PAUSE"); return 0; } 執行結果如下: The x1 is: 99 The x2 is: 149 The x3 is: 7 The x4 is: 11 The x5 is: 17 The x6 is: 13 The x7 is: 5 The x8 is: 1 雖然程式寫的沒有錯誤,可是只算出X1= 99的情況,還有97,95,93...13...5...1 等其他奇數的情況,另外,我在陣列Y部分我是先用筆算出來在換算成程式碼,可是我是希 望用數學的方式來換成程式碼,請問一下各位高手該如何解決這個問題??? 謝謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.39.183.89

09/25 04:29, , 1F
也許可以去計算機數學版(Prob_Solve)問問看,
09/25 04:29, 1F

09/25 04:30, , 2F
那邊比較多這方面的討論,應該也比較多專家
09/25 04:30, 2F

09/25 06:11, , 3F
Y的話while(!(X&1))X<<=1; ??
09/25 06:11, 3F

09/25 06:13, , 4F
想看其他情況用for(x=99;x>0;x-=2)來改就好了@@
09/25 06:13, 4F

09/25 07:07, , 5F
看起來像ACM100 3n+1 problem
09/25 07:07, 5F

09/25 08:00, , 6F
迴圈跑7次卻印出8行? = =
09/25 08:00, 6F

09/25 08:24, , 7F
這是 ACM100 的變種, 差別在於如果為偶數就一值除2到
09/25 08:24, 7F

09/25 08:25, , 8F
變出奇數為止
09/25 08:25, 8F
文章代碼(AID): #1CdGQMa2 (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 4 篇):
問題
2
8
文章代碼(AID): #1CdGQMa2 (C_and_CPP)