Bill Allombert on Thu, 28 May 2020 14:35:44 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: CONSTRUCTING ELLIPTIC CURVES OF PRESCRIBED ORDER


On Thu, May 28, 2020 at 01:41:04PM +0200, Michael Hortmann wrote:
> https://openaccess.leidenuniv.nl/bitstream/handle/1887/4425/Thesis.pdf
> https://www.win.tue.nl/diamant/symposium05/abstracts/broeker.pdf
> https://link.springer.com/chapter/10.1007/978-3-540-24847-7_8
> 
> No CM.

At least this algorithm 
https://www.win.tue.nl/diamant/symposium05/abstracts/broeker.pdf
use CM heavily.

However this is very easy to implement in GP:

findDP(N)=
{
  my(F=[4*N,factor(4*N)]);
  for(d=5,oo,my(D=-d);
    V=qfbsolve(Qfb(1,0,-D),F,1);
    if(V,
      for(i=1,#V,
        my(p=N+1-V[i][1]);
        if(ispseudoprime(p),return([D,p])))));
}

findE(N)=
{
  my([D,p]=findDP(N));
  my(j=polrootsmod(polclass(D),p)[1]);
  my(E=ellinit(ellfromj(j)));
  if(ellcard(E)!=N,E=ellinit(elltwist(E)));
  E;
}

? findDP(10^1000+453)
%4 =
[-2643,10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084580564865659365122376528413332645532152171127546438119158218509746454894047502311475921435925593395788663825537350510530446716403741222340985964099742528845624992705649011211562977747791787795828408878166796544029225171287772986659453369047576935911760465854704590139939913782088978690725584432808323194356221767413951670691765171583388575651408252249668909097564489522144887781732134899389587753697361876577100306912030685148084979302637035928995834607369105121944422262464187611018973884015439291]

? E = findE(10^100+267);
? ellcard(E)
%14 =
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000267

(for large N, you do not want to use ellcard, there are faster way to
pick between E and its twist)

Cheers,
Bill.