Karim Belabas on Wed, 09 May 2012 18:28:43 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: Errors in poliscycloprod |
* Charles Greathouse [2012-05-09 14:48]: > poliscycloprod(polcyclo(1)^2) returns 0 instead of 1. More generally, > it seems that poliscycloprod(polcyclo(m)^n) is 0 for any m >= 1 and n > >= 2. This does not follow the documentation, which says, properly in > my opinion, > > poliscycloprod(f): returns 1 if f is a product of cyclotomic > polynonials, and 0 otherwise. > > One thing I'd like to do with the function is to detect periodic > sequences by the denominator of their g.f., and in that case repeated > factors -- especially of x-1 -- are very common. Sorry, I currently can't access the git repository ( behind a stupid firewall and the 'workaround' proxy I had set up on my home machine died yesterday ) But the following patch should fix the (trivial) problem: diff --git a/src/basemath/QX_factor.c b/src/basemath/QX_factor.c index 4c666b7..7a1db54 100644 --- a/src/basemath/QX_factor.c +++ b/src/basemath/QX_factor.c @@ -1414,7 +1414,11 @@ poliscycloprod(GEN f) if (!RgX_is_ZX(f)) return 0; if (!equali1(leading_term(f)) || !is_pm1(constant_term(f))) return 0; if (d < 2) return (d == 1); - (void)ZX_gcd_all(f, ZX_deriv(f), &f); + if ( degpol(ZX_gcd_all(f, ZX_deriv(f), &f)) ) + { + d = degpol(f); + if (d == 1) return 1; + } f = BD(f); if (!f) return 0; for (i = lg(f)-1; i; i--) d -= degpol(gel(f,i)); avma = av; return d == 0; > Further, on the Windows git version, > > ? poliscycloprod(x^3-1) > *** at top-level: poliscycloprod(x^3-1 > *** ^-------------------- > *** poliscycloprod: the PARI stack overflows ! > current stack size: 157286400 (150.000 Mbytes) > [hint] you can increase GP stack with allocatemem() > > which seems to happen for x^k - 1 for all k not a power of 2. I can't reproduce that one. I get no compiler warning and valgrind doesn't show anything suspect. Can you try to investigate ? Cheers, K.B. -- Karim Belabas, IMB (UMR 5251) Tel: (+33) (0)5 40 00 26 17 Universite Bordeaux 1 Fax: (+33) (0)5 40 00 69 50 351, cours de la Liberation http://www.math.u-bordeaux1.fr/~belabas/ F-33405 Talence (France) http://pari.math.u-bordeaux1.fr/ [PARI/GP] `