Changeset 1fc18b in git
- Timestamp:
- Aug 11, 2006, 11:47:22 AM (18 years ago)
- Branches:
- (u'spielwiese', '17f1d200f27c5bd38f5dfc6e8a0879242279d1d8')
- Children:
- cd3d3369e55f59ac72a629fa206a0f305d198a9e
- Parents:
- b667caf2ea37ddf1b9e31af26bf41fd6d4ccefd2
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/modulop.cc
rb667ca r1fc18b 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: modulop.cc,v 1. 5 2005-07-27 15:48:29Singular Exp $ */4 /* $Id: modulop.cc,v 1.6 2006-08-11 09:47:22 Singular Exp $ */ 5 5 /* 6 6 * ABSTRACT: numbers modulo p (<=32003) … … 102 102 103 103 #ifdef HAVE_DIV_MOD 104 #if 1 //ifdef HAVE_NTL // in ntl.a 104 #ifdef USE_NTL_XGCD 105 //ifdef HAVE_NTL // in ntl.a 105 106 //extern void XGCD(long& d, long& s, long& t, long a, long b); 106 107 #include <NTL/ZZ.h> … … 108 109 NTL_CLIENT 109 110 #endif 111 #endif 112 113 long InvMod(long a) 114 { 115 long d, s, t; 116 117 #ifdef USE_NTL_XGCD 118 XGCD(d, s, t, a, npPrimeM); 119 assume (d == 1); 110 120 #else 111 void XGCD(long& d, long& s, long& t, long a, long b)112 {113 121 long u, v, u0, v0, u1, v1, u2, v2, q, r; 114 122 115 long aneg = 0, bneg = 0; 116 117 if (a < 0) { 118 a = -a; 119 aneg = 1; 120 } 121 122 if (b < 0) { 123 b = -b; 124 bneg = 1; 125 } 126 127 u1=1; v1=0; 128 u2=0; v2=1; 129 u = a; v = b; 130 131 while (v != 0) { 123 assume(a>0); 124 u1=1; u2=0; 125 u = a; v = npPrimeM; 126 127 while (v != 0) 128 { 132 129 q = u / v; 133 130 r = u % v; … … 135 132 v = r; 136 133 u0 = u2; 137 v0 = v2; 138 u2 = u1 - q*u2; 139 v2 = v1- q*v2; 134 u2 = u1 - q*u2; 140 135 u1 = u0; 141 v1 = v0;142 136 } 143 137 144 if (aneg) 145 u1 = -u1; 146 147 if (bneg) 148 v1 = -v1; 149 150 d = u; 138 assume(u==1); 151 139 s = u1; 152 t = v1; 153 } 154 #endif 155 156 long InvMod(long a) 157 { 158 long d, s, t; 159 160 XGCD(d, s, t, a, npPrimeM); 161 assume (d == 1); 140 #endif 162 141 if (s < 0) 163 142 return s + npPrimeM;
Note: See TracChangeset
for help on using the changeset viewer.