/* Copyright 2015 Vladimir Glazachev This file is part of FLINT. FLINT is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License (LGPL) as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. See . */ #include #include #include "profiler.h" #include "aprcl.h" void p_is_prime_repeat(fmpz_t n) { int i; TIMEIT_START if (aprcl_is_prime(n) == 0) { flint_printf("Primality test failed\n"); abort(); } TIMEIT_STOP } int main(void) { const int len = 5; FLINT_TEST_INIT(state); /* Using the primes from mpz_aprcl implementation readme.txt file link : https://sourceforge.net/projects/mpzaprcl/ */ flint_printf("Primality test profiling for numbers from 350 to 2000 digits\n"); flint_printf("All timings given for one number\n"); /* 350 digits prime */ { int i; fmpz_t n; fmpz_init(n); fmpz_set_ui(n, 1160); fmpz_pow_ui(n, n, 114); fmpz_add_ui(n, n, 7); flint_printf("350 digit prime : 1160^114 + 7\n"); p_is_prime_repeat(n); fmpz_clear(n); } /* 400 digits prime */ { int i; fmpz_t n; fmpz_init(n); fmpz_set_ui(n, 291); fmpz_pow_ui(n, n, 163); fmpz_sub_ui(n, n, 1); fmpz_fdiv_q_ui(n, n, 290); flint_printf("400 digit prime : (291^163 - 1) / 290\n"); p_is_prime_repeat(n); fmpz_clear(n); } /* 450 digits prime */ { int i; fmpz_t n; fmpz_init(n); fmpz_set_ui(n, 232); fmpz_pow_ui(n, n, 190); fmpz_add_ui(n, n, 7); flint_printf("450 digit prime : 232^190 + 7\n"); p_is_prime_repeat(n); fmpz_clear(n); } /* 500 digits prime */ { int i; fmpz_t n; fmpz_init(n); fmpz_set_ui(n, 1014); fmpz_pow_ui(n, n, 166); fmpz_add_ui(n, n, 7); flint_printf("500 digit prime : 1014^166 + 7\n"); p_is_prime_repeat(n); fmpz_clear(n); } /* 550 digits prime */ { int i; fmpz_t n; fmpz_init(n); fmpz_set_ui(n, 10); fmpz_pow_ui(n, n, 549); fmpz_mul_ui(n, n, 9); fmpz_sub_ui(n, n, 7); flint_printf("550 digit prime : 10^549 * 9 - 7\n"); p_is_prime_repeat(n); fmpz_clear(n); } /* 600 digits prime */ { int i; fmpz_t n; fmpz_init(n); fmpz_set_ui(n, 1432); fmpz_pow_ui(n, n, 190); fmpz_add_ui(n, n, 7); flint_printf("600 digit prime : 1432^190 + 7\n"); p_is_prime_repeat(n); fmpz_clear(n); } /* 650 digits prime */ { int i; fmpz_t n; fmpz_init(n); fmpz_set_ui(n, 2); fmpz_pow_ui(n, n, 2159); fmpz_add_ui(n, n, 375); flint_printf("650 digit prime : 2^2159 + 375\n"); p_is_prime_repeat(n); fmpz_clear(n); } /* 700 digits prime */ { int i; fmpz_t n1, n2; fmpz_init(n1); fmpz_init(n2); fmpz_set_ui(n1, 157); fmpz_pow_ui(n1, n1, 319); fmpz_set_ui(n2, 319); fmpz_pow_ui(n2, n2, 157); fmpz_add(n1, n1, n2); fmpz_fdiv_q_ui(n1, n1, 28); flint_printf("700 digit prime : (157^319 + 319^157) / 28\n"); p_is_prime_repeat(n1); fmpz_clear(n1); fmpz_clear(n2); } /* 750 digits prime */ { int i; fmpz_t n; fmpz_init(n); fmpz_set_ui(n, 10); fmpz_pow_ui(n, n, 749); fmpz_mul_ui(n, n, 2); fmpz_add_ui(n, n, 89); flint_printf("750 digit prime : 10^749 * 2 + 89\n"); p_is_prime_repeat(n); fmpz_clear(n); } /* 800 digits prime */ { int i; fmpz_t n; fmpz_init(n); fmpz_set_ui(n, 10); fmpz_pow_ui(n, n, 799); fmpz_mul_ui(n, n, 61); fmpz_sub_ui(n, n, 7); fmpz_fdiv_q_ui(n, n, 9); flint_printf("800 digit prime : (10^799 * 61 - 7) / 9\n"); p_is_prime_repeat(n); fmpz_clear(n); } /* 850 digits prime */ { int i; fmpz_t n; fmpz_init(n); fmpz_set_ui(n, 2); fmpz_pow_ui(n, n, 2821); fmpz_sub_ui(n, n, 183); flint_printf("850 digit prime : 2^2821 - 183\n"); p_is_prime_repeat(n); fmpz_clear(n); } /* 900 digits prime */ { int i; fmpz_t n; fmpz_init(n); fmpz_set_ui(n, 24); fmpz_pow_ui(n, n, 653); fmpz_sub_ui(n, n, 1); fmpz_fdiv_q_ui(n, n, 23); flint_printf("900 digit prime : (24^653 - 1) / 23\n"); p_is_prime_repeat(n); fmpz_clear(n); } /* 950 digits prime */ { int i; fmpz_t n; fmpz_init(n); fmpz_set_ui(n, 10); fmpz_pow_ui(n, n, 949); fmpz_mul_ui(n, n, 4); fmpz_sub_ui(n, n, 9); flint_printf("950 digit prime : 10^949 * 4 - 9\n"); p_is_prime_repeat(n); fmpz_clear(n); } /* 1000 digits prime */ { int i; fmpz_t n; fmpz_init(n); fmpz_set_ui(n, 10); fmpz_pow_ui(n, n, 999); fmpz_add_ui(n, n, 7); flint_printf("1000 digit prime : 10^999 + 7\n"); p_is_prime_repeat(n); fmpz_clear(n); } /* 1100 digits prime */ { int i; fmpz_t n; fmpz_init(n); fmpz_set_ui(n, 2); fmpz_pow_ui(n, n, 3653); fmpz_add_ui(n, n, 41); flint_printf("1100 digit prime : 2^3653 + 41\n"); p_is_prime_repeat(n); fmpz_clear(n); } /* 1200 digits prime */ { int i; fmpz_t n; fmpz_init(n); fmpz_set_ui(n, 10); fmpz_pow_ui(n, n, 1199); fmpz_mul_ui(n, n, 5); fmpz_add_ui(n, n, 9); flint_printf("1200 digit prime : 10^1199 * 5 + 9\n"); p_is_prime_repeat(n); fmpz_clear(n); } /* 1300 digits prime */ { int i; fmpz_t n; fmpz_init(n); fmpz_set_ui(n, 2); fmpz_pow_ui(n, n, 4318); fmpz_add_ui(n, n, 165); flint_printf("1300 digit prime : 2^4318 + 165\n"); p_is_prime_repeat(n); fmpz_clear(n); } /* 1400 digits prime */ { int i; fmpz_t n; fmpz_init(n); fmpz_set_ui(n, 187); fmpz_pow_ui(n, n, 617); fmpz_sub_ui(n, n, 1); fmpz_fdiv_q_ui(n, n, 186); flint_printf("1400 digit prime : (187^617 - 1) / 186\n"); p_is_prime_repeat(n); fmpz_clear(n); } /* 1500 digits prime */ { int i; fmpz_t n; fmpz_init(n); fmpz_set_ui(n, 2); fmpz_pow_ui(n, n, 4972); fmpz_mul_ui(n, n, 1779); fmpz_sub_ui(n, n, 1); flint_printf("1500 digit prime : 2^4972 * 1779 - 1\n"); p_is_prime_repeat(n); fmpz_clear(n); } /* 1600 digits prime */ { int i; fmpz_t n; fmpz_init(n); fmpz_set_ui(n, 12); fmpz_pow_ui(n, n, 1483); fmpz_add_ui(n, n, 1); fmpz_fdiv_q_ui(n, n, 13); flint_printf("1600 digit prime : (12^1483 + 1) / 13\n"); p_is_prime_repeat(n); fmpz_clear(n); } /* 1700 digits prime */ { int i; fmpz_t n; fmpz_init(n); fmpz_set_ui(n, 2); fmpz_pow_ui(n, n, 5644); fmpz_sub_ui(n, n, 227); flint_printf("1700 digit prime : 2^5644 - 227\n"); p_is_prime_repeat(n); fmpz_clear(n); } /* 1800 digits prime */ { int i; fmpz_t n; fmpz_init(n); fmpz_set_ui(n, 10); fmpz_pow_ui(n, n, 1800); fmpz_sub_ui(n, n, 87); flint_printf("1800 digit prime : 10^1800 - 87\n"); p_is_prime_repeat(n); fmpz_clear(n); } /* 1900 digits prime */ { int i; fmpz_t n; fmpz_init(n); fmpz_set_ui(n, 10); fmpz_pow_ui(n, n, 1900); fmpz_add_ui(n, n, 3); fmpz_fdiv_q_ui(n, n, 7); flint_printf("1900 digit prime : (10^1900 + 3) / 7\n"); p_is_prime_repeat(n); fmpz_clear(n); } /* 2000 digits prime */ { int i; fmpz_t n; fmpz_init(n); fmpz_set_ui(n, 2); fmpz_pow_ui(n, n, 6643); fmpz_mul_ui(n, n, 113); fmpz_add_ui(n, n, 1); fmpz_fdiv_q_ui(n, n, 115); flint_printf("2000 digit prime : (2^6643 * 113 + 1) / 115\n"); p_is_prime_repeat(n); fmpz_clear(n); } return 0; }