#include #include int main(int ac, char **av) { mpz_t l1, l2, l3; int n = atoi(av[1]); int state; char *result; mpz_init_set_ui(l1, 0); mpz_init_set_ui(l2, 1); mpz_init_set_ui(l3, 0); state = 1; do { switch (state) { case 1: mpz_add(l3, l2, l1); state = 2; break; case 2: mpz_add(l1, l3, l2); state = 3; break; case 3: mpz_add(l2, l1, l3); state = 1; break; } } while (--n != 0); switch (state) { case 1: result = mpz_get_str(NULL, 10, l2); break; case 2: result = mpz_get_str(NULL, 10, l3); break; case 3: result = mpz_get_str(NULL, 10, l1); break; } printf("%s\n", result); mpz_clear(l1); mpz_clear(l2); mpz_clear(l3); }