static void pp1_ul64_process(cofact_algo_t *algo, candidate_t **batch, int n_batch) { mod64 n; ul64 f, X; candidate_t *cand; int i; pp1_plan_t *plan; mpz_t gf; double tin, tout; plan = (pp1_plan_t *) algo->plan; ul64_init(f); ul64_init(X); mod64_init(n); mpz_init(gf); tin = dbltime(); for(i = 0; i < n_batch; i++) { cand = batch[i]; mpz_get_ul64(n->n, cand->rem[cand->side]); mod64_set(n, n->n); ul64_set_ui(X, 0); pp1_stage1_ul64(f, X, n, plan); if(ul64_cmp_ui(f, 1) != 0 && ul64_cmp(f, n->n) != 0) { /* factor found in stage1 */ mpz_set_ul64(gf, f); #if PRINTF_FACTOR_FOUND gmp_printf("pp1s1(64) factor found: %Zd (mod %Zd)\n", gf, cand->rem[cand->side]); #endif candidate_add_factor_mpz(cand, cand->side, gf); cofact_next_algo(cand, algo->algo_idx + 1); continue; } pp1_stage2_ul64(f, X, n, &plan->stage2); if(ul64_cmp_ui(f, 1) != 0 && ul64_cmp(f, n->n) != 0) { /* factor found in stage2 */ mpz_set_ul64(gf, f); #if PRINTF_FACTOR_FOUND gmp_printf("pp1s2(64) factor found: %Zd (mod %Zd)\n", gf, cand->rem[cand->side]); #endif candidate_add_factor_mpz(cand, cand->side, gf); } cofact_next_algo(cand, algo->algo_idx + 1); } tout = dbltime(); pp1_total += (tout - tin); mpz_clear(gf); mod64_clear(n); ul64_clear(X); ul64_clear(f); return; }
static void ecm_ul64_process(cofact_algo_t *algo, candidate_t **batch, int n_batch) { mod64 n; ul64 f, b; ellM64_point_t X; candidate_t *cand; int i; ecm_plan_t *plan; mpz_t gf; double tin, tout; plan = (ecm_plan_t *) algo->plan; ul64_init(f); ul64_init(b); ul64_init(X->x); ul64_init(X->z); mod64_init(n); mpz_init(gf); tin = dbltime(); for(i = 0; i < n_batch; i++) { cand = batch[i]; mpz_get_ul64(n->n, cand->rem[cand->side]); mod64_set(n, n->n); ecm_stage1_ul64(f, X, b, n, plan); if(ul64_cmp_ui(f, 1) != 0 && ul64_cmp(f, n->n) != 0) { /* factor found in stage1 */ mpz_set_ul64(gf, f); candidate_add_factor_mpz(cand, cand->side, gf); cofact_next_algo(cand, algo->algo_idx + 1); continue; } ecm_stage2_ul64(f, X, b, n, &plan->stage2); if(ul64_cmp_ui(f, 1) != 0 && ul64_cmp(f, n->n) != 0) { /* factor found in stage2 */ mpz_set_ul64(gf, f); candidate_add_factor_mpz(cand, cand->side, gf); } cofact_next_algo(cand, algo->algo_idx + 1); } tout = dbltime(); ecm_total += (tout - tin); mpz_clear(gf); mod64_clear(n); ul64_clear(X->x); ul64_clear(X->z); ul64_clear(b); ul64_clear(f); return; }
void vec_mulmod64_initp(uint64_t p) { mulmod_p = p; mod64_init(p); }