Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int saved[255];
- int it_collatz(int n, int counter) {
- if (n == 1) {
- return counter;
- } else if (n == 2) {
- return counter + 1;
- }
- switch (n % 4) {
- case 0:
- return it_collatz(n / 4, counter + 2);
- case 3:
- return it_collatz(n * 2 + (n / 4) + 2, counter + 4);
- default:
- return it_collatz(n - (n / 4), counter + 3);
- }
- }
- int collatz(int n) {
- if (saved[n] == 0) saved[n] = it_collatz(n, 0);
- return saved[n];
- }
- typedef struct {
- int n;
- int counter;
- } data;
- int greater(const void *a, const void *b) {
- return (*(data*)b).counter - (*(data*)a).counter;
- }
- int main() {
- data d[255];
- long begin, end;
- begin = clock();
- for (int i = 1; i < 256; i++) {
- d[i-1].n = i;
- d[i-1].counter = collatz(i);
- }
- qsort(d, 255, sizeof(data), greater);
- for (int i = 0; i < 16; i++) {
- printf("%x %x\n", d[i].n, d[i].counter);
- }
- end = clock();
- printf("%ld\n", end - begin);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement