mpz_t *howmany(int num) { int *bf; int i; mpz_t *ret = malloc(sizeof(mpz_t)); mpz_init(*ret); mpz_add_ui(*ret, *ret, 1); mpz_t temp; mpz_init(temp); for (i = 1; i <= num; i++) { bf = calloc(i+1, sizeof(int)); bf[i] = -1; while (!ended(bf)) { if (valid_bf(bf)) { mpz_ui_pow_ui(temp, 6, num-i); mpz_add(*ret, *ret, temp); } incr(bf); } free(bf); } return ret; }