int factor(mpz_t x_1, mpz_t x_2, mpz_t d, mpz_t n, mpz_t tmp, mpz_t *factors) { int num_factors = 0; while (IS_ONE(n) != 0 && IS_PRIME(n) == 0) { /*pollard(x_1, x_2, d, n, 2, 1, MAX_NUMBER_OF_TRIES);*/ pollard_brent(x_1, x_2, d, n, 2, 3, MAX_NUMBER_OF_TRIES); if(FAILED(d)) { return 0; } while (IS_ONE(d) != 0 && IS_PRIME(d) == 0) { /*pollard(x_2, x_2, tmp, d, 2, 1, MAX_NUMBER_OF_TRIES);*/ pollard_brent(x_1, x_2, d, n, 2, 3, MAX_NUMBER_OF_TRIES); if(FAILED(tmp)) { return 0; } mpz_set(d, tmp); } do { ADD_FACTOR(factors, num_factors, d); mpz_divexact(n, n, d); } while (mpz_divisible_p(n, d)); } if(IS_ONE(n) != 0) { ADD_FACTOR(factors, num_factors, n); } return num_factors; }
static void simple(void) { TB_INFO("Simple cases"); DEF_BIGINT(x, 2048); IS_COMPOSITE("0"); IS_COMPOSITE("1"); IS_PRIME("2"); IS_PRIME("3"); IS_PRIME("17"); IS_PRIME("FA1"); IS_COMPOSITE("FA0"); DEL_BIGINT(x); }
int main(int argc, char** argv) { char sieve[N]; get_primes(sieve, N); int count = 0; int i; for (i = 0; i < N; i++) { if (sieve[i] == IS_A_PRIME) { //printf("%d\n", i + i + 3); count++; } } /* plus 2, which is not indicated with the array. */ printf("num of primes: %d\n", count + 1); printf("is 2333 a prime number? %d\n", IS_PRIME(2333)); return 0; }
static void large_primes(void) { TB_INFO("Large Primes"); DEF_BIGINT(x, 2048); IS_PRIME("000136A3_52B2C7A5"); IS_PRIME("00000002_2770A7DC_599BC90B_2FF981CC_B5CF0570_3344C8F3_50418AAD"); IS_PRIME("000067E0_4F440C5F_ECCA2694_B1A4AB4F_CEC2D2B2_D286FC93_DD259D2B_36A3A00D_F3726A4D_4DFA9919_5998D92F_43DD7370_B8C079E2_3072036F_0C13F3F6_ABA1D6DF"); IS_PRIME("000BC9F7_E42CE741_32EC6933_DE1B8357_CD2AEB9E_4B8A5F26_BD233D1E_6F295555_4D2CFA97_60F3F69C_CC52E8E4_28F68C37_AD5BC70C_DB12F4DC_EF23CB10_1C36A2A7"); IS_PRIME("00000005_233FE157_B5B44102_598513AE_BB8876B0_D1791769_C8A1B0F3_6875D06F_E26951C7_372192C7_B21CAB67_ADF0D6FE_1A718FB3_FC4A5145_4DE87CD3_F852005B_AAEC35D5"); IS_PRIME("0000001A_655954FB_C4408E09_FE97EB82_5E0F0964_26B42317_A36E53FF_9608DD3F_A6610402_45906334_496987EF_B14BEA5F_7C050444_C9B22A09_EC76AF4E_BDC609D8_A90C05E9_E5AF0682_9C542DFC_F7E6B9DC_0B065659_C1816309_CD6012C3_7F8CE649_8DECF850_F33943F0_F8308140_6846D306_22E0BCE6_97E612FC_1F7A5D90_2280D6E0_3009E585"); DEL_BIGINT(x); }