Problemas com a biblioteca de inteiros grandes GMP

Fiz um programa baseado no algoritmo de Fermat para fatoração de inteiros. O objetivo desse programa é achar os fatores de um inteiro n, caso contrário esse numero n é primo.

O problema encontrado foi que ele pede para inserir o numero duas vezes ao inves de 1 e ao serem inseridos esses números dá como resultado “Falha na segmentação”.

/* Metodo de Fermat
	Autor: Gustavo R. Grosch, Higor H. P. Nucci
	Orientadora: Adriana B. P. Molgora
	Esse método procura por fatores de um número n, onde esses fatores (em seu melhor caso) estão 
	perto da raiz quadrada de n.
*/

#include <stdlib.h>

#include <math.h>
#include <time.h>
#include <stdio.h>

#include <gmp.h>
#include <stdarg.h>


typedef int bool;
const bool false = 0;
const bool true = 1;


int main()

{
	/* Inicializando as variáveis usando a biblioteca GNU Multi Precision Arithmetic Library */
	mpz_t x;
	mpz_t n;
	mpz_t teste;
	mpz_t y;
	mpz_t rop;
	mpz_t temp;
	mpz_t res;
	mpz_t sobra;
	mpz_t op;

	mpz_init(x);     
	mpz_init(y);
	mpz_init(teste);
	mpz_init(rop);
	mpz_init(temp);
	mpz_init(res);
	mpz_init(sobra);
	mpz_init(op);


    	bool primo = false, quadrado = false;
	unsigned long int num;

	/* Variáveis usadas para calcular o tempo decorrido */

    	clock_t  tInicio ,tFinal;

    	double tMedia=0, tValor;



    	printf("Entre com o valor: \n");
	gmp_scanf("%Zd\n", n);
	printf("1");

    	tInicio = clock();
	/* Calculando a raíz quadrada de n, onde x recebe o resultado */
	mpz_root(x, n, 2);
	/* Elevando o valor de x ao quadrado */
	mpz_pow_ui(rop, x, 2);
	/* Verifica se n é um quadrado perfeito, caso contrário continue*/
	int compara = mpz_cmp (rop, n);
	if(compara < 0) {
		/* Incrementa x para começar o cálculo */
		mpz_add_ui(x, x, 1);
		/* Elevando o valor de x ao quadrado */
		mpz_pow_ui(rop, x, 2);
		/* x² - n */
		mpz_sub(temp, rop, n);
		/* raiz do resultado acima */
		mpz_rootrem(y, sobra, temp, 2);
		/* Condição de parada: se x >= (n + 1)/2 */
		mpz_add_ui(op, n, 1);
		mpz_fdiv_q_2exp(res, op, 2);
		/* Enquanto y não for um inteiro continua (sobra != 0) */
		while ((mpz_cmp(sobra, 0) != 0) && (mpz_cmp(x, res) < 0)) {

           		mpz_add_ui(x, x, 1);
			mpz_mul(rop, x, x);
			mpz_sub(temp, rop, n);
			mpz_rootrem(y, sobra, temp, 2);

        	}

    	}else{

        	quadrado = true;

    	}
	mpz_add_ui(temp, n, 1);
	mpz_fdiv_q_2exp(res, temp, 2);

    	if ((mpz_cmp(x, res) == 0)){

        	primo = true;

    	}

    	tFinal = clock();

    	tValor = ((tFinal-tInicio)/(CLOCKS_PER_SEC/1000));

    	if ((!quadrado) && (!primo)){
		mpz_add(rop, x, y);
		mpz_sub(res, x, y);
		gmp_printf("Os valores correspondentes são x = %Zd\n", rop);
		gmp_printf(" e y = %Zd\n", res);

        	printf("o tempo para achar a resposta foi de %f milissegundos.", tValor);

    	}else{

        	if (quadrado){
			gmp_printf("%Zd é um quadrado perfeito.", n);

            		printf("o tempo para achar a resposta foi de %f milissegundos.", tValor);

        	}else{

            		if (primo){
				gmp_printf("%Zd é um número primo.", n);

                		printf("o tempo para achar a resposta foi de %f milissegundos.", tValor);

            		}

        	}

    	}

	/* Limpando as variáveis */

    	mpz_clear(x);
    	mpz_clear(n);
    	mpz_clear(teste);
	mpz_clear(y);
	mpz_clear(rop);
	mpz_clear(temp);
	mpz_clear(res);
	mpz_clear(sobra);
	mpz_clear(op);


    	return EXIT_SUCCESS;    

}

Caso alguém saiba o que pode estar acontecendo, agradeceria de coração.

Por acaso você sabe usar o gdb? Use esse depurador para saber em que linha ocorreu o “Segmentation Fault”.
(Provavelmente você deve ter cometido algum erro na entrada de dados, confira os tipos e parâmetros adequados).
Não conheço suficientemente essa biblioteca para, só de olhar o programa, ver em que linha está ocorrendo o problema e como resolver.

Você inicializou a variável n? Vi que você inicializou tudo, exceto n.

Use um depurador para rodar o programa linha por linha, até chegar à linha em que ocorreu o problema. Então procure o que pode ter ocorrido nessa linha mesmo ou em alguma linha anterior.

Obrigado. Farei isso agora e ‘postarei’ os resultados.