|
1 // Preliminary Part about the 3n+1 conjecture |
|
2 //============================================ |
|
3 |
|
4 object CW6a { |
|
5 |
|
6 //(1) Complete the collatz function below. It should |
|
7 // recursively calculate the number of steps needed |
|
8 // until the collatz series reaches the number 1. |
|
9 // If needed, you can use an auxiliary function that |
|
10 // performs the recursion. The function should expect |
|
11 // arguments in the range of 1 to 1 Million. |
|
12 |
|
13 def collatz(n: Long) : Long = ??? |
|
14 |
|
15 |
|
16 //(2) Complete the collatz_max function below. It should |
|
17 // calculate how many steps are needed for each number |
|
18 // from 1 up to a bound and then calculate the maximum number of |
|
19 // steps and the corresponding number that needs that many |
|
20 // steps. Again, you should expect bounds in the range of 1 |
|
21 // up to 1 Million. The first component of the pair is |
|
22 // the maximum number of steps and the second is the |
|
23 // corresponding number. |
|
24 |
|
25 def collatz_max(bnd: Long) : (Long, Long) = ??? |
|
26 |
|
27 //(3) Implement a function that calculates the last_odd |
|
28 // number in a collatz series. For this implement an |
|
29 // is_pow_of_two function which tests whether a number |
|
30 // is a power of two. The function is_hard calculates |
|
31 // whether 3n + 1 is a power of two. Again you can |
|
32 // assume the input ranges between 1 and 1 Million, |
|
33 // and also assume that the input of last_odd will not |
|
34 // be a power of 2. |
|
35 |
|
36 def is_pow_of_two(n: Long) : Boolean = ??? |
|
37 |
|
38 def is_hard(n: Long) : Boolean = ??? |
|
39 |
|
40 def last_odd(n: Long) : Long = ??? |
|
41 |
|
42 } |
|
43 |