Changeset e961571 in git
- Timestamp:
- Feb 19, 2013, 12:56:40 PM (10 years ago)
- Branches:
- (u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'a800fe4b3e9d37a38c5a10cc0ae9dfa0c15a4ee6')
- Children:
- 73b2e93d708311ad220a6ca578c7bff10757938afd65244df2e764406fbf106074b1b1782db1d97b
- Parents:
- 11e593b7d06bde70555fd944e100187b744cd03b
- git-author:
- Hans Schoenemann <hannes@mathematik.uni-kl.de>2013-02-19 12:56:40+01:00
- git-committer:
- Hans Schoenemann <hannes@mathematik.uni-kl.de>2013-02-19 13:01:11+01:00
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libpolys/polys/ext_fields/algext.cc
r11e593 re961571 52 52 #endif 53 53 54 54 55 55 #include <polys/ext_fields/algext.h> 56 56 #define TRANSEXT_PRIVATES 1 … … 670 670 } 671 671 #endif 672 number napLcm(number b, const coeffs cf) 673 { 674 number h=n_Init(1,naRing->cf); 675 poly bb=(poly)b; 676 number d; 677 while(bb!=NULL) 678 { 679 d=n_Lcm(h,pGetCoeff(bb), naRing->cf); 680 n_Delete(&h,naRing->cf); 681 h=d; 682 pIter(bb); 683 } 684 } 685 number naLcmContent(number a, number b, const coeffs cf) 686 { 687 if (nCoeff_is_Zp(naRing->cf)) return naCopy(a,cf); 688 else return ndGcd(a,b,cf); 689 #if 0 690 { 691 a=(number)p_Copy((poly)a,naRing); 692 number t=napLcm(b,cf); 693 if(!naIsOne(t,cf)) 694 { 695 number bt, rr; 696 poly xx=(poly)a; 697 while (xx!=NULL) 698 { 699 bt = n_Gcd(t, pGetCoeff(xx), naRing->cf); 700 rr = n_Mult(t, pGetCoeff(xx), naRing->cf); 701 n_Delete(&pGetCoeff(xx),naRing->cf); 702 pGetCoeff(xx) = n_Div(rr, bt, naRing->cf); 703 n_Normalize(pGetCoeff(xx),naRing->cf); 704 n_Delete(&bt,naRing->cf); 705 n_Delete(&rr,naRing->cf); 706 pIter(xx); 707 } 708 } 709 n_Delete(&t,naRing->cf); 710 return (number) a; 711 } 712 #endif 713 } 672 714 673 715 /* expects *param to be castable to AlgExtInfo */ … … 689 731 if( rEqual(naRing, e->r, TRUE) ) // also checks the equality of qideals 690 732 { 691 const ideal mi = naRing->qideal; 733 const ideal mi = naRing->qideal; 692 734 assume( IDELEMS(mi) == 1 ); 693 735 const ideal ii = e->r->qideal; … … 696 738 // TODO: the following should be extended for 2 *equal* rings... 697 739 assume( p_EqualPolys(mi->m[0], ii->m[0], naRing, e->r) ); 698 740 699 741 rDelete(e->r); 700 742 701 743 return TRUE; 702 744 } … … 773 815 number naGcd(number a, number b, const coeffs cf) 774 816 { 817 if (a==NULL) return naCopy(b,cf); 818 if (b==NULL) return naCopy(a,cf); 819 820 poly ax=(poly)a; 821 poly bx=(poly)b; 822 if (pNext(ax)!=NULL) 823 return (number)p_Copy(ax, naRing); 824 else 825 { 826 if(nCoeff_is_Zp(naRing->cf)) 827 return naInit(1,cf); 828 else 829 { 830 number x = n_Copy(pGetCoeff((poly)a),naRing->cf); 831 if (n_IsOne(x,naRing->cf)) 832 return (number)p_NSet(x,naRing); 833 while (pNext(ax)!=NULL) 834 { 835 pIter(ax); 836 number y = n_Gcd(x, pGetCoeff(ax), naRing->cf); 837 n_Delete(&x,naRing->cf); 838 x = y; 839 if (n_IsOne(x,naRing->cf)) 840 return (number)p_NSet(x,naRing); 841 } 842 do 843 { 844 number y = n_Gcd(x, pGetCoeff(bx), naRing->cf); 845 n_Delete(&x,naRing->cf); 846 x = y; 847 if (n_IsOne(x,naRing->cf)) 848 return (number)p_NSet(x,naRing); 849 pIter(bx); 850 } 851 while (bx!=NULL); 852 return (number)p_NSet(x,naRing); 853 } 854 } 855 #if 0 775 856 naTest(a); naTest(b); 776 if ((a == NULL) && (b == NULL)) WerrorS(nDivBy0);777 857 const ring R = naRing; 778 858 return (number) singclap_gcd(p_Copy((poly)a, R), p_Copy((poly)b, R), R); 859 #endif 779 860 // return (number)p_Gcd((poly)a, (poly)b, naRing); 780 861 } … … 784 865 naTest(a); 785 866 if (a == NULL) WerrorS(nDivBy0); 786 867 787 868 poly aFactor = NULL; poly mFactor = NULL; poly theGcd = NULL; 788 869 // singclap_extgcd! … … 792 873 793 874 // if( ret ) theGcd = p_ExtGcd((poly)a, aFactor, naMinpoly, mFactor, naRing); 794 875 795 876 naTest((number)theGcd); naTest((number)aFactor); naTest((number)mFactor); 796 877 p_Delete(&mFactor, naRing); 797 878 798 879 // /* the gcd must be 1 since naMinpoly is irreducible and a != NULL: */ 799 // assume(naIsOne((number)theGcd, cf)); 880 // assume(naIsOne((number)theGcd, cf)); 800 881 801 882 if( !naIsOne((number)theGcd, cf) ) 802 { 883 { 803 884 WerrorS("zero divisor found - your minpoly is not irreducible"); 804 885 p_Delete(&aFactor, naRing); aFactor = NULL; … … 984 1065 const ring R = cf->extRing; 985 1066 assume(R != NULL); 986 const coeffs Q = R->cf; 987 assume(Q != NULL); 988 assume(nCoeff_is_Q(Q)); 1067 const coeffs Q = R->cf; 1068 assume(Q != NULL); 1069 assume(nCoeff_is_Q(Q)); 989 1070 990 1071 numberCollectionEnumerator.Reset(); … … 1004 1085 1005 1086 int normalcount = 0; 1006 1087 1007 1088 poly cand1, cand; 1008 1089 1009 1090 do 1010 1091 { … … 1013 1094 1014 1095 naTest(n); 1015 1096 1016 1097 cand1 = (poly)n; 1017 1098 … … 1036 1117 number& n = numberCollectionEnumerator.Current(); 1037 1118 ++length; 1038 1119 1039 1120 if( (--normalcount) <= 0) 1040 1121 naNormalize(n, cf); 1041 1122 1042 1123 naTest(n); 1043 1124 1044 1125 // p_InpGcd(cand, (poly)n, R); 1045 1126 1046 1127 cand = singclap_gcd(cand, p_Copy((poly)n, R), R); 1047 1128 1048 1129 // cand1 = p_Gcd(cand,(poly)n, R); p_Delete(&cand, R); cand = cand1; 1049 1130 1050 1131 assume( naGreaterZero((number)cand, cf) ); // ??? 1051 1132 /* … … 1069 1150 } 1070 1151 */ 1071 1072 } 1152 1153 } 1073 1154 1074 1155 // part3: all coeffs = all coeffs / cand … … 1076 1157 cand = p_Neg(cand, R); 1077 1158 1078 c = (number)cand; naTest(c); 1159 c = (number)cand; naTest(c); 1079 1160 1080 1161 poly cInverse = (poly)naInvers(c, cf); 1081 1162 assume(cInverse != NULL); // c is non-zero divisor!? 1082 1163 1083 1164 1084 1165 numberCollectionEnumerator.Reset(); 1085 1166 … … 1102 1183 assume(length == 0); 1103 1184 } 1104 1105 definiteReduce((poly &)n, naMinpoly, cf); 1106 } 1107 1185 1186 definiteReduce((poly &)n, naMinpoly, cf); 1187 } 1188 1108 1189 assume(length == 0); 1109 1190 assume(cInverse == NULL); // p_Delete(&cInverse, R); … … 1114 1195 number cc; 1115 1196 1116 n_ClearContent(itr, cc, Q); // TODO: get rid of (-LC) normalization!? 1197 n_ClearContent(itr, cc, Q); // TODO: get rid of (-LC) normalization!? 1117 1198 1118 1199 // over alg. ext. of Q // takes over the input number 1119 c = (number) p_Mult_nn( (poly)c, cc, R); 1200 c = (number) p_Mult_nn( (poly)c, cc, R); 1120 1201 // p_Mult_q(p_NSet(cc, R), , R); 1121 1202 … … 1169 1250 } 1170 1251 } 1171 */ 1172 1173 1252 */ 1253 1254 1174 1255 // c = n_Init(1, cf); assume(FALSE); // TODO: NOT YET IMPLEMENTED!!! 1175 1256 } … … 1183 1264 1184 1265 assume(cf->extRing != NULL); 1185 const coeffs Q = cf->extRing->cf; 1186 assume(Q != NULL); 1187 assume(nCoeff_is_Q(Q)); 1266 const coeffs Q = cf->extRing->cf; 1267 assume(Q != NULL); 1268 assume(nCoeff_is_Q(Q)); 1188 1269 number n; 1189 1270 CRecursivePolyCoeffsEnumerator<NAConverter> itr(numberCollectionEnumerator); // recursively treat the numbers as polys! … … 1269 1350 #endif 1270 1351 cf->cfGcd = naGcd; 1271 //cf->cfLcm = naLcm;1352 cf->cfLcm = naLcmContent; 1272 1353 cf->cfSize = naSize; 1273 1354 cf->nCoeffIsEqual = naCoeffIsEqual; … … 1289 1370 cf->cfClearDenominators = naClearDenominators; 1290 1371 } 1291 1372 1292 1373 return FALSE; 1293 1374 }
Note: See TracChangeset
for help on using the changeset viewer.