Advertisement
Guest User

Untitled

a guest
Mar 27th, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.18 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <time.h>
  3.  
  4.  
  5. unsigned int collatz(unsigned long n, unsigned int memo[]) {
  6.   // If the number is larger than the memory, just calculate and be happy
  7.   if (n > 1000000) {
  8.     if ((n %2) == 0) {
  9.       return 1 + collatz(n/2, memo);
  10.     } else {
  11.       return 1 + collatz(n * 3 + 1, memo);
  12.     }
  13.   }
  14.  
  15.   // Handle even numbers
  16.   if((n%2) == 0) {
  17.     if (memo[n] == 0) {
  18.       memo[n] = 1 + collatz(n/2, memo);
  19.       return memo[n];
  20.     } else {
  21.       return memo[n];
  22.     }
  23.   }
  24.  
  25.   // Handle odd numbers
  26.   if (memo[n] == 0) {
  27.     memo[n] = 1 + collatz(n * 3 + 1, memo);
  28.     return memo[n];
  29.   } else {
  30.     return memo[n];
  31.   }
  32. }
  33.  
  34.  
  35.  
  36. int main(void) {
  37.   clock_t begin = clock();
  38.   unsigned int memo[1000001] = {0, 1};
  39.  
  40.   unsigned int biggest_seq = 1;
  41.   unsigned int biggest_start = 1;
  42.   unsigned int temp = 0;
  43.   for(unsigned int i =1; i<1000000; i++) {
  44.     temp = collatz(i, memo);
  45.     if(temp>biggest_seq) {
  46.       biggest_start = i;
  47.       biggest_seq = temp;
  48.     }
  49.   }
  50.   clock_t end = clock();
  51.   double tspent = (double)(end - begin) / CLOCKS_PER_SEC;
  52.  
  53.   printf("%d - %d in %f seconds", biggest_start, biggest_seq, tspent);
  54.   return 0;
  55.  
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement