The following iterative sequence is defined for the set of positive integers:
n n/2 (n is even)
n 3n + 1 (n is odd)
Using the rule above and starting with 13, we generate the following sequence:
13 40 20 10 5 16 8 4 2 1
It can be seen that this sequence (starting at 13 and finishing at 1) contains 10 terms. Although it has not been proved yet (Collatz Problem), it is thought that all starting numbers finish at 1.
Which starting number, under one million, produces the longest chain?
NOTE: Once the chain starts the terms are allowed to go above one million.
Collatz問題。 這個我還是用暴力的方法解決了,還沒發現好的規律。
寫程式過程中小總結:
※ 對於變數定義的時候最好要初始化,不然會有意想不到的結果。 好比改程式裡面的n 和 max。 C語言裡面不初始化,系統是不會給變數自動賦0的。這點要額外小心注意。
歐拉項目第十四題#include <stdio.h>#include <stdlib.h>int lenCollatz(unsigned long n); // 輸入一個數,進行Collatz迭代, 最終返回鏈長 int main(int argc, char *argv[]){ unsigned long n = 13, max = 1; int lenmax = 1; while(n < 1000000) { if(lenmax < lenCollatz(n)) { max = n; lenmax = lenCollatz(n); } n++; } printf("Max numer is %lu, max length is %d", max, lenmax); system("PAUSE"); return 0;}int lenCollatz(unsigned long n){ int len = 1; while(n != 1) { if(n % 2 == 0) n /= 2; else n = 3*n + 1; len ++; } return len;}