Advertisement
apexsquirt

Collatz generalization stuff

Jun 8th, 2020
1,053
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.91 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. bool in_array (int needle, int haystack[5000]) {
  4.     for (int i = 0; haystack[i] != -1; i++) {
  5.         if (needle == haystack[i]) return true;
  6.     } return false;
  7. }
  8. void add (int needle, int haystack[5000]) {
  9.     int i = 0;
  10.     while (haystack[i] != -1) i++;
  11.     if (haystack[i] == -1) {
  12.         haystack[i] = needle;
  13.         haystack[i+1] = -1;
  14.     }
  15. }
  16. void print (int haystack[5000]) {
  17.     for (int i = 0; haystack[i] != -1; i++) {
  18.         printf("%i ",haystack[i]);
  19.     }
  20.     printf("\n");
  21. }
  22. int length (int haystack[5000]) {
  23.     int li = 0;
  24.     for (int i = 0; haystack[i] != -1; i++) {
  25.         li++;
  26.     }
  27.     return li;
  28. }
  29. int valuation (int base, int number) {
  30.     if (number % base != 0) return 0;
  31.     if (number == 0) return -1661992959; else {
  32.         int c = number;
  33.         int i = 0;
  34.         while (c % base == 0) {
  35.             c /= base;
  36.             i++;
  37.         }
  38.         return i;
  39.     }
  40. }
  41. int powval (int base, int number) {
  42.     int val = valuation(base, number);
  43.     int prod = 1;
  44.     if (val <= 0) return prod; else {
  45.         for (int i = 0; i < val; i++) {
  46.             prod *= base;
  47.         }
  48.         return prod;
  49.     }
  50. }
  51. int collatz (int number, int base = 2) {
  52.     if (number % base == 0) return number/powval(base,number); else {
  53.         int num = (int(number/base) + number + 1);
  54.         return num/powval(base,num);
  55.     }
  56. }
  57. int main (int, char **) {
  58.     int i,j;
  59.     int now;
  60.     bool dowhile, overall;
  61.     int haystack[5000];
  62.     int yeetsack[5000];
  63.     for (int step = 2; step <= 250/4; step++) {
  64.         goto yeeeet;
  65.         yeet2:
  66.         printf("b = %i, m != n and a_m = a_n = ... : ",step-1);
  67.         print(yeetsack);
  68.         yeeeet:
  69.         yeetsack[0] = -1;
  70.         for (i = step; i < 100000000; i++) {
  71.             dowhile = false;
  72.             haystack[0] = i;
  73.             haystack[1] = -1;
  74.             j = i;
  75.             while (!in_array(collatz(j,step),haystack) and collatz(j,step) >= step) {
  76.                 add(collatz(j,step),haystack);
  77.                 j = collatz(j,step);
  78.             }
  79.             add(collatz(j,step),haystack);
  80.             now = haystack[length(haystack)-1];
  81.             if (now <= 0) dowhile = true;
  82.             if (!in_array(now,yeetsack)) {
  83.                 add(now,yeetsack);
  84.             }
  85.             overall = true;
  86.             for (int k = 0; k < step; k++) {
  87.                 if (in_array(k,haystack)) overall = false;
  88.             }
  89.             if ((dowhile or now < 0 or now >= step) and overall) {
  90.                 i = 0; step++;
  91.                 if (now < 0) {
  92.                     haystack[length(haystack)-1] = -1;
  93.                     yeetsack[length(yeetsack)-1] = -1;
  94.                 }
  95.                 if (now >= step) {
  96.                     printf("   (doesn't work) b = %i, m != n and a_m = a_n = ... : ",step-1);
  97.                     print(yeetsack);
  98.                     goto yeeeet;
  99.                 }
  100.                 goto yeet2;
  101.             }
  102.         }
  103.         printf("b = %i, m != n and a_m = a_n = ... : ",step);
  104.         print(yeetsack);
  105.     }
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement