int main(int argc, char* argv[]) { int i = 0; mpz_t test; mpz_t base; if (argc != 2) { printf("Usage: %s <num>\n", argv[0]); printf(" Where <num> is the start of a range of 25 numbers to test\n"); return 0; } mpz_init_set_str(test, argv[1], 10); mpz_init_set_ui(base, 2); for (i = 0; i < 25; i++) { gmp_printf("%6Zd -", test); printf("%3d", mpz_prp(test, base)); printf("%3d", mpz_euler_prp(test, base)); printf("%3d", mpz_sprp(test, base)); printf("%3d", mpz_fibonacci_prp(test, 1, -1)); printf("%3d", mpz_lucas_prp(test, 1, -1)); printf("%3d", mpz_stronglucas_prp(test, 1, -1)); printf("%3d", mpz_extrastronglucas_prp(test, 3)); printf("%3d", mpz_selfridge_prp(test)); printf("%3d", mpz_strongselfridge_prp(test)); printf("%3d", mpz_bpsw_prp(test)); printf("%3d", mpz_strongbpsw_prp(test)); printf("\n"); fflush(stdout); mpz_add_ui(test, test, 1); } mpz_clear(test); mpz_clear(base); return 0; }
int is_mpz_prp(mpz_t n) { return mpz_probab_prime_p(n,NUM_WITNESSES) && mpz_strongbpsw_prp(n); }