Benjamin Matschke on Sat, 20 Jun 2020 16:05:45 +0200


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

Re: rnfpolredbest for larger polynomials


Hi Karim,

Thanks a lot!

> A solution would be to alternate between a number of ROUND4 loops and
> ECM-type factorizations which would strive to find "smallish" large factors
> for some bounded amount of time. And to give up when neither seems to work.

This sounds like a very good idea, presumably even for (rnf)polredbest
in general.

Best,
Benjamin

Le ven. 19 juin 2020 à 05:42, Karim Belabas
<Karim.Belabas@math.u-bordeaux.fr> a écrit :
>
> Hi Benjamin,
>
> * Benjamin Matschke [2020-06-19 04:16]:
> > rnfpolredbest seems to get slow for larger inputs, here is an example:
> >
> > f = y^4 + 3779*y^2 + 3575881
> > K = bnfinit(f)
> > g = x^3 + (-6/1891*y^3 - 11328/1891*y + 12)*x -
> > 185828205268604880664711758295687064824766032511727208226289638708278008/1891*y^3
> > - 4193788865327654200848261540592786277199048095680627005208368097895442*y^2
> > - 364061076121017004851315903951025443139463935963694411909316544669762680474/1891*y
> > - 7620275092346327331118337613708081210333545556068555805693518189928940204
> > g_reduced = rnfpolredbest(K,g) \\slow
>
> The underlying problem here is the following:
>
> T = x^12+48*x^10+1215555874761101125537810268967953841736223282879955682590773324177989820*x^9+648*x^8+30632008043979748363552818777992436811752826728574883201287487769285343464*x^7+738788042333112882145134143188977023476014770677496688188276711316507811615622174044748578132585575234165143001945921727313365615401868011818760*x^6+78768020684519352934850105429123408944507268730621128231882111406733740336*x^5+1773091301599470917148321943653544856342435449625992051651864107159618747877493217707396587518205380561996343204670212145552077476964483228362864*x^4-17960762901225368783003903267629032616403886697137147437481267086367399523735695578775243399153498173759016297775695600522276362451802481059998146168647195820252033812450674869704592074645075610991440288296824898576*x^3+1063854780959682550288993166192126913805461269775595230991118464295771248726495930624437952510923228337197805922802127287331246486178689937017632*x^2-21552915481470442539604683921154839139684664036564576924977520503640879428482834694530292078984197808510819557330834720626731634942162977272060789818924250466650320659284108570801116304558587635775234035081576870560*x+218323108597757356816370007679560788705316602458706378183831948603297113957467284158904352695741338140569781899238358367585333582313267102871478350375396563645877765785163790756406438812814709907184184409701434438316037663054434778512225162646251708831271021769288337532699380656595600;
>
> nfbasis([T, 500000]); \\ infinite loop
>
> addprimes([12198999209,28527455371,2154391156987]);
> nfbasis([T, 500000]); \\ instantaneous
>
> > Also in this example, L = rnfinit(K,g) runs into a large integer
> > factorization.
>
> This is normal and expected, see ??rnfinit, in particular the "Huge
> discriminants, helping rnfdisc" section
>
> > Would it in general be possible to have a version of rnfpolredbest
> > that returns some simplified polynomial within a given time frame?
>
> This is what the current implementation aims to achieve, but the above bug
> prevents it.
>
> > Perhaps it could make sense for large input polynomials g (as the one
> > above) to first reduce it greedily (with respect to some naive height
> > of g), say by adding elements of K to the primitive element of L/K,
> > and iterate in a gradient flow or simulated annealing way.
>
> I don't know how to do this. The algorithm must compute some approximation to
> the ring of integers and it does this by using a supposedly polynomial time
> algorithm (a variant of ROUND4 avoiding integer factorization, which would
> be necessary to compute the true ring of integers). The problem is that the
> algorithm is polynomial time only when fed actual primes and we run it on
> large composites expecting either a correct result or a quick "side exit"
> (a non invertible non-zero element in Z/NZ, which produces a factor of N).
> In this example, we get no result and no side exit.
>
> A solution would be to alternate between a number of ROUND4 loops and
> ECM-type factorizations which would strive to find "smallish" large factors
> for some bounded amount of time. And to give up when neither seems to work.
>
> Cheers,
>
>     K.B.
> --
> Karim Belabas, IMB (UMR 5251)  Tel: (+33) (0)5 40 00 26 17
> Universite de Bordeaux         Fax: (+33) (0)5 40 00 21 23
> 351, cours de la Liberation    http://www.math.u-bordeaux.fr/~kbelabas/
> F-33405 Talence (France)       http://pari.math.u-bordeaux.fr/  [PARI/GP]
> `