Post a reply
Username:
Note:If not registered, provide any username. For more comfort, register here.
Subject:
Message body:
Enter your message here, it may contain no more than 60000 characters. 

Smilies
:D :) :( :o :shock: :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:
Font size:
Font colour
Options:
BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON
Disable BBCode
Disable smilies
Do not automatically parse URLs
Confirmation of post
To prevent automated posts the board requires you to enter a confirmation code. The code is displayed in the image you should see below. If you are visually impaired or cannot otherwise read this code please contact the %sBoard Administrator%s.
Confirmation code:
Enter the code exactly as it appears. All letters are case insensitive, there is no zero.
   

Topic review - large exponent of minpoly? (use bigint?)
Author Message
  Post subject:  Re: large exponent of minpoly? (use bigint?)  Reply with quote
gepo wrote:
This is what i want to compute:

ring r=(2,a),x,dp;
minpoly=a^5+a^3+1; //here is a min polynomial definition
a^12345678987654321;

can I make such a computation? since the exponent is so large, I tried to use bigint:
bigint(a)^12345678987654321;
but failed.
Gepo


No this is not possible in this way.
bigint is only available for the coefficients
(more precisely it is the type number),
but not for the exponents.

Code:

6.1 Limitations says

* the maximal allowed exponent of a ring variable depends on
    the ordering of the ring and is at least 32767.


First at all, it make not really sense, that you define such a
big exponent for an algebraic extension of degree 5.

Calculation with numbers in GF(25) means that all coefficients
are considered as polynomials reduced by the minimal polynomial
of degree 5.

Hence all coefficients will be polynomial expressions in a with
coefficients 0 or 1 and a degree less or equal to 4.

So suppose you want compute a^23.

Then consider polynomial division in char 2
of X^23 by X^5+X^3+1; where the latter is your minpoly.

Code:
> ring r2 =2,x,dp;
> division(x23, x5+x3+1);
[1]:
   _[1,1]=x18+x16+x14+x13+x12+x10+x9+x5+x4+x3+x2+x
[2]:
   _[1]=x3+x2+x
[3]:
   _[1,1]=1


The remainder is x3+x2+x and this will be the result in
your ring defined at the beginning.
Code:
> setring r;
> basering;
//   characteristic : 2
//   1 parameter    : a
//   minpoly        : (a5+a3+1)
//   number of vars : 1
//        block   1 : ordering dp
//                  : names    x
//        block   2 : ordering C

> a^23;
(a3+a2+a)


Well done !

But what you can do, that is that you use for exponentiation.
the following proc Exp
(An extended and improved version of proc exp from realrad.)


// Your example again
Code:
> setring r;
> Exp(a,12345678987654321);
(a4+a3+a2+a+1)


Here is the code:
Code:
proc Exp(def b, bigint N)
"USAGE: Exp(b,N); a number / bigint /int ; N int / bigint
RETURN: number resp. bigint b^N,
NOTE: the return type is
       number, if b is of type number but not a transcendantal parameter
       bigint, if b is of type bigint
       int,    if b is of type int, and b^N is less or eqaual to MAXINT = 2^31-1,
               resp. bigint otherwise
"
{
   
   string b_type = typeof(b);
   if (b_type != "int" and b_type != "bigint" and b_type != "number")
   {
    ERROR("// -- proc Exp: basis must be of type int, bigint or number");
   }
   if (N < 0)
   {
    ERROR("// -- proc Exp: only non-negative exponent allowed");
   }
   if (b_type=="number")
   {   
    number Res = 1;
    number B = b;
   }
   
   if (b_type=="int" or b_type=="bigint" )
   {
    bigint Res = 1;
    bigint B = b;
   }

   while (N > 0)
   {
      if (N mod 2 == 1)
      {
        Res = Res * B;
        N = N-1;
       Res;
       }
      B = B * B;
      N = N div 2;
   }
 
   if (b_type=="int" and Res<=2147483647)   // MAXINT, 
   {
      return(int(Res));             // convert result to int
   }
   else
   {
     return(Res);
   }
}


Checks
Code:
> Exp(2,80);
1208925819614629174706176
> typeof(_);
bigint
> Exp(2,8);
256
> typeof(_);
int

> ring r=0,x,dp;
> number q = 2;
> Exp(q,8);
> typeof(_);
number
> Exp(q,80);
1208925819614629174706176
> typeof(_);
number
Post Posted: Fri Apr 09, 2010 3:27 pm
  Post subject:  large exponent of minpoly? (use bigint?)  Reply with quote
This is what i want to compute:
ring r=(2,a),x,dp;
minpoly=a^5+a^3+1; //here is a min polynomial definition
a^12345678987654321;

can I make such a computation? since the exponent is so large, I tried to use bigint:
bigint(a)^12345678987654321;
but failed.

Any ideas?

Thanks
Gepo
Post Posted: Fri Apr 09, 2010 12:30 am


It is currently Fri May 13, 2022 11:04 am
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group