作者wodada (wodada)
看板C_and_CPP
標題[問題] 3x+1問題
時間Sat Sep 25 04:14:11 2010
末學目前寫了一份關於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
推 freesamael:也許可以去計算機數學版(Prob_Solve)問問看, 09/25 04:29
→ freesamael:那邊比較多這方面的討論,應該也比較多專家 09/25 04:30
→ x000032001:Y的話while(!(X&1))X<<=1; ?? 09/25 06:11
→ x000032001:想看其他情況用for(x=99;x>0;x-=2)來改就好了@@ 09/25 06:13
推 cismjmgoshr:看起來像ACM100 3n+1 problem 09/25 07:07
→ loveme00835:迴圈跑7次卻印出8行? = = 09/25 08:00
→ loveme00835:這是 ACM100 的變種, 差別在於如果為偶數就一值除2到 09/25 08:24
→ loveme00835:變出奇數為止 09/25 08:25