Macaulay2 Engine
Loading...
Searching...
No Matches

◆ power() [1/2]

ring_elem PolyRing::power ( const ring_elem f,
int n ) const
virtual

Reimplemented from Ring.

Reimplemented in SchurRing, SkewPolynomialRing, SolvableAlgebra, and WeylAlgebra.

Definition at line 918 of file poly.cpp.

919{
920 ring_elem ff;
921
922 if (n > 0)
923 ff = f0;
924 else if (n < 0)
925 {
926 ff = invert(f0);
927 n = -n;
928 }
929 else
930 return from_long(1);
931
932 if(!characteristic())
933 {
934 return power_direct(ff, n);
935 }
936 else
937 {
938 long p=characteristic(), pk=1;
939 ring_elem result = from_long(1);
940 ring_elem gg = copy(ff), temp; // no need to copy, just the correct number of terms
941
942 while(n)
943 {
944 for(Nterm *it=ff, *jt=gg; it!=nullptr; it=it->next, jt=jt->next)
945 {
946 jt->coeff = K_->power(it->coeff, pk);
947 M_->power(it->monom, pk, jt->monom);
948 }
949
950 temp = power_direct(gg, n%p);
951 result = mult(result, temp);
952
953 pk *= p;
954 n /= p;
955 }
956
957 return result;
958 }
959}
ring_elem power_direct(const ring_elem f, int n) const
Definition poly.cpp:868
virtual ring_elem from_long(long n) const
Definition poly.cpp:169
virtual ring_elem mult(const ring_elem f, const ring_elem g) const
Definition poly.cpp:821
virtual ring_elem invert(const ring_elem f) const
Definition poly.cpp:961
virtual ring_elem copy(const ring_elem f) const
Definition poly.cpp:653
const Ring * K_
Definition polyring.hpp:123
const Monoid * M_
Definition polyring.hpp:124
long characteristic() const
Definition ring.hpp:159
int p
VALGRIND_MAKE_MEM_DEFINED & result(result)

References Ring::characteristic(), copy(), from_long(), invert(), PolynomialRing::K_, PolynomialRing::M_, mult(), p, power_direct(), and result().