but i need to check the gcd for all ni, where ni=n/pi. here pi are the prime
factors of n. So
i have to call gf_pow for all such numbers. what can i do in that case?

Kasun

On Tue, Mar 9, 2010 at 8:52 PM, Mateusz Paprocki <matt...@gmail.com> wrote:

> Hi,
>
> On Tue, Mar 09, 2010 at 08:36:18PM +0100, Kasun Samarasinghe wrote:
> > Hi,
> >
> > I m working on the comments, I think i can find out the problems in the
> > algorithm implementation.
> >
> > In the implementation I need to have a polynomial x^(p^ni) to test the
> gcd
> > with the given polynomial. In this situation it takes a long time using
> the
> > gf_pow function. My values are
> > p = 11, ni = {6,4}. Is it because it raises to a large power or is it a
> > problem with my code.
> >
>
> this is a natural thing that gf_pow will be slow because the exponent is
> huge and increasing, and you repeat a lot of computations unnecessarily.
> In the literature there is a method suggested to overcome this problem.
> In general you will need to compute gf_pow only once, at the beginning
> of the algorithm (x**p).
>
> > Kasun
> >
> > On Tue, Mar 9, 2010 at 1:07 PM, Mateusz Paprocki <matt...@gmail.com>
> wrote:
> >
> > > Hi,
> > >
> > > On Sun, Mar 07, 2010 at 02:07:29PM +0100, Kasun Samarasinghe wrote:
> > > > hi,
> > > > I have attached the patch with this for rabin's test for
> irreducibility
> > > > test. Please give me some comments on that.
> > > >
> > >
> > > def gf_irreducible_rabin(f, p, K):
> > >    """Test for the irreducibility of a polynomial over `GF(p)[x]`.
> > >
> > >    This is an implementation of the Rabin's irreducibility test
> > >    for monic polynomials, which is another probabilistic algortihm.
> > >     This test is based on the following theorem
> > >
> > >    Let p1,p2,...pn be the prime divisors of n, and denote ni = n/pi,
> > >    for 1<i<k. A polynomial f in GF(p) of degree n is irreducible in
> > >    GF(p), if and only if gcd(f, x^(p^ni)-x mod f ) = 1 for 1 <i<k, and
> > >    x^(p^ni)-x | f.
> > >
> > >     References
> > >    ==========
> > >    M O Rabin, Probabilistic algorithims in finite fields. SIAM J Comp.,
> > >    273 - 280, 1980.
> > >
> > >    """
> > >    from sympy import primefactors
> > >     n = gf_degree(f)
> > >    if n <= 1:
> > >        return True
> > >
> > >    for pi in primefactors(n):
> > >        g = gf_pow([1,0], pi^(n/pi), p, K)
> > >         h = gf_sub(g,[1,0],p,K)
> > >
> > >        if gf_gcd(f, h, p, K)!= K.one and gf_rem(g, h, p, K)!= K.zero:
> > >            return False
> > >
> > >    return True
> > >
> > > A few comments:
> > >
> > > 1.
> > >
> > > (...) a polynomial in `GF(p)[x]`.
> > >
> > > or
> > >
> > > (...) a polynomial over `GF(p)`.
> > >
> > > btw. This might be inconsistent in SymPy after all.
> > >
> > > 2. (...) irreducibility test for monic polynomials (...)
> > >
> > > You say this is for monic polynomials but you don't check this or
> > > make the input polynomial monic anywhere. This will work anyway
> > > because gf_gcd() returns always monic (unique) output (and this
> > > is a general rule for gcd functions in SymPy).
> > >
> > > 3. Missing `from sympy import primefactors`
> > >
> > > 4. [1, 0] must be [K.one, K.zero] because otherwise you introduce
> > > inconsistency to SymPy's ground types with can have bad implications
> > > if your algorithm is used in more complicated context.
> > >
> > > 5. if gf_gcd(f, h, p, K)!= K.one (...)
> > >
> > > No, K is coefficient (ground) domain so it should read != [K.one]
> > > (note that zero polynomial is [] not [K.zero]).
> > >
> > > 6. g = gf_pow([1,0], pi^(n/pi), p, K)
> > >
> > > Should be ** instead of ^, or this is some kind of trick I don't catch?
> > >
> > > 7. M O Rabin, Probabilistic algorithims in finite fields (...)
> > >
> > > Spell check docstrings and comments!
> > >
> > > 8.
> > > References
> > > ==========
> > > M O Rabin, Probabilistic algorithims in finite fields. SIAM J Comp.,
> > > 273 - 280, 1980.
> > >
> > > The above doesn't comply with how bibliographic items are written in
> > > polys module, e.g.:
> > >
> > > .. [Geddes92] K. Geddes, S. Czapor, G. Labahn, Algorithms for
> > >   Computer Algebra, First Edition, Springer, 1992, pp. 343-347
> > >
> > > 9. Even with corrections applied the algorithm doesn't work, e.g.:
> > >
> > > In [1]: from sympy.polys.galoistools import *
> > >
> > > In [2]: f = gf_irreducible(6, 11, ZZ)
> > >
> > > In [3]: gf_irreducible_rabin(f, 11, ZZ)
> > > Out[3]: True
> > >
> > > In [4]: gf_irreducible_rabin(gf_pow(f, 2, 11, ZZ), 11, ZZ)
> > > Out[4]: True
> > >        ^^^^ Should be False.
> > >
> > > Lets compare with SymPy's irreducibility testing function:
> > >
> > > In [5]: gf_irreducible_p(f, 11, ZZ)
> > > Out[5]: True
> > >
> > > In [6]: gf_irreducible_p(gf_pow(f, 2, 11, ZZ), 11, ZZ)
> > > Out[6]: False
> > >
> > > > Kasun
> > > >
> > > > On Sat, Mar 6, 2010 at 8:32 AM, Ondrej Certik <ond...@certik.cz>
> wrote:
> > > >
> > > > > On Fri, Mar 5, 2010 at 3:00 PM, Kasun Samarasinghe
> > > > > <kwsamarasin...@gmail.com> wrote:
> > > > > > hi,
> > > > > > how can i patch the modification i done using git?
> > > > >
> > > > > I created some video tutorials here:
> > > > >
> > > > > http://code.google.com/p/sympy/wiki/GitTutorials
> > > > >
> > > > > Ondrej
> > > > >
> > > > > --
> > > > > You received this message because you are subscribed to the Google
> > > Groups
> > > > > "sympy" group.
> > > > > To post to this group, send email to sy...@googlegroups.com.
> > > > > To unsubscribe from this group, send email to
> > > > > sympy+unsubscr...@googlegroups.com<sympy%2bunsubscr...@googlegroups.com>
> <sympy%2bunsubscr...@googlegroups.com<sympy%252bunsubscr...@googlegroups.com>
> ><
> > > sympy%2bunsubscr...@googlegroups.com<sympy%252bunsubscr...@googlegroups.com>
> <sympy%252bunsubscr...@googlegroups.com<sympy%25252bunsubscr...@googlegroups.com>
> >
> > > >.
> > > > > For more options, visit this group at
> > > > > http://groups.google.com/group/sympy?hl=en.
> > > > >
> > > > >
> > > >
> > > > --
> > > > You received this message because you are subscribed to the Google
> Groups
> > > "sympy" group.
> > > > To post to this group, send email to sy...@googlegroups.com.
> > > > To unsubscribe from this group, send email to
> > > sympy+unsubscr...@googlegroups.com<sympy%2bunsubscr...@googlegroups.com><
> sympy%2bunsubscr...@googlegroups.com<sympy%252bunsubscr...@googlegroups.com>
> >.
> > > > For more options, visit this group at
> > > http://groups.google.com/group/sympy?hl=en.
> > > >
> > >
> > > --
> > > Mateusz
> > >
> > >
> >
> > --
> > You received this message because you are subscribed to the Google Groups
> "sympy" group.
> > To post to this group, send email to sy...@googlegroups.com.
> > To unsubscribe from this group, send email to
> sympy+unsubscr...@googlegroups.com <sympy%2bunsubscr...@googlegroups.com>.
> > For more options, visit this group at
> http://groups.google.com/group/sympy?hl=en.
> >
>
> --
> Mateusz
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To post to this group, send email to sy...@googlegroups.com.
To unsubscribe from this group, send email to 
sympy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sympy?hl=en.

Reply via email to