10 bool is_prime(mpz_t p
);
11 bool is_prime2(mpz_t p
);
16 //ints for is_prime test
51 //proth number is k*2^n+1
58 for(unsigned long int n
= 698200; ; n
++)
60 mpz_pow_ui(exp
, base
, n
);
67 gmp_printf("(n=%d)\n%Zd\n\n", n
, p
);
68 if(is_prime2(p
) == true)
70 printf(" <--- prime\n");
80 bool is_prime(mpz_t p
)
84 mpz_sub_ui(t_exp
, p
, 1);
85 mpz_divexact_ui(t_exp
, t_exp
, 2);
86 unsigned long int ui_exp
= mpz_get_ui(t_exp
);
89 mpz_pow_ui(t
, t_p1
, ui_exp
);
92 if(mpz_divisible_p(t
, p
) != 0)
96 mpz_pow_ui(t
, t_p2
, ui_exp
);
99 if(mpz_divisible_p(t
, p
) != 0)
103 mpz_pow_ui(t
, t_p3
, ui_exp
);
106 if(mpz_divisible_p(t
, p
) != 0)
112 bool is_prime2(mpz_t p
)
114 //exponent is (p-1)/2
116 mpz_sub_ui(t_exp
, p
, 1);
117 mpz_divexact_ui(t_exp
, t_exp
, 2);
120 mpz_powm(t
, t_p1
, t_exp
, p
);
123 if(mpz_cmp(t
, p
) == 0)
127 mpz_powm(t
, t_p2
, t_exp
, p
);
130 if(mpz_cmp(t
, p
) == 0)
134 mpz_powm(t
, t_p3
, t_exp
, p
);
137 if(mpz_cmp(t
, p
) == 0)