/usr/include/eclib/mrank1.h is in libec-dev 20160720-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | // mrank1.h -- declaration of class rank1 for general 2-descent
//////////////////////////////////////////////////////////////////////////
//
// Copyright 1990-2012 John Cremona
//
// This file is part of the eclib package.
//
// eclib is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2 of the License, or (at your
// option) any later version.
//
// eclib is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License
// along with eclib; if not, write to the Free Software Foundation,
// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
//
//////////////////////////////////////////////////////////////////////////
class rank1 : public rank12 {
private:
long nquarticsa, nquarticsb, nfirstlota, nfirstlotb;
long sha_rank, sha2;
int traceequiv, posdisc, disc_is_square, npairs, extra2, threediv, type;
quartic *qlista, *qlistb;
int * qlistbflag;
bigcomplex* croots;
bigcomplex* cphi;
vector<Point> pointlist1, pointlist2;
long npoints1, npoints2;
int have_eggpoint, have_large_quartics;
long twoadic_index, global_index;
long bsd_npairs; // only for testing
// 1, 2 or 4: local/global index of "small" quartics
bigint c4, c6, d1728, ii, jj, disc;
long Imod2, Jmod2;
bigfloat xii, xjj;
vector<bigint> plist, dlist;
vector<long> eqplist; // primes used for equiv-sieving
long n0, n1, n2, rank_B;
//
//
// Sieving stuff:
int ipivot, pivflag;
long * auxs; long ** phimod; int * aux_flags; int * aux_types;
int**squares;
int ***flags;
int **flaga; int *flagah;
long *amod, *astepmod, *ascalemod, *hmod, *hstepmod, *hscalemod;
long ah_count, ah_sieve_0, ah_sieve_1, ah_sieve_2;
long ah_rfail, ah_dfail, ah_efail, ah_extra2fail, ah_pass;
void aux_init(); // define auxiliary moduli and squares
void flag_init(); // set up flag array
void clear_sieve(); // free memory related to sieve;
long* qeps(const quartic&, int x2); //computes eps of quartic
void show_eps_vec(long * vec);
// process latest quartic found
void addquartic(const bigint& a, const bigint& b, const bigint& c,
const bigint& d, const bigint& e);
void getquartics();
void getquartics1();
void gettype(int t);
public:
rank1(Curvedata* ec,
int verb=0, int sel=0,
long lim1=20, long lim2=5, long n_aux=-1);
// lim1 is bound on |x|+|z| in naive search
// lim2 is bound on log max {|x|,|z| }, i.e. logarithmic
// sel is selmer_only switch
// n_aux is # sieving primes in quartic search
// n_aux=-1 causes default to be used (depends on method)
//
void sortpoints();
void listpoints();
void listpoints(Curvedata* CD_orig, const bigint& u, const bigint& r,
const bigint& s, const bigint& t);
vector<Point> getgens() const;
vector<Point> getpoints();
long getselmerprime() const {return selmer_rank;}
long getselmerphi() const {return selmer_rank;}
long getselmerphiprime() const {return selmer_rank;}
Curvedata getEprime() const {return *the_curve;}
};
|