Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- /* 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. */
- void solution_one(void);
- int main()
- {
- solution_one();
- /* The number is 837799.
- * real 0m1,664s
- * user 0m1,642s
- * sys 0m0,016s */
- return(0);
- }
- void solution_one(void)
- {
- int number;
- long int item;
- int sequence_length;
- int current_max_sequence_length = 4;
- int the_number = 1;
- for(number = 2; number < 1000000; number++)
- {
- item = number;
- sequence_length = 2;
- while(item > 1)
- {
- if(item % 2 == 0)
- item /= 2;
- else
- item = item * 3 + 1;
- sequence_length++;
- }
- if(current_max_sequence_length < sequence_length)
- {
- current_max_sequence_length = sequence_length;
- the_number = number;
- }
- }
- printf("The number is %d.\n", the_number);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement