Changeset 65148c4 in git
- Timestamp:
- Feb 18, 2013, 5:54:37 PM (10 years ago)
- Branches:
- (u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'a800fe4b3e9d37a38c5a10cc0ae9dfa0c15a4ee6')
- Children:
- 77ed18101c07cdbb767d8703e5ea1d0f7c8b05f6
- Parents:
- 71a4d7b8fea297969227779896a8ec8fc63aaedaa1da6f6fa3cfce502fec23270a8a572c1290577d
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
IntegerProgramming/BigInt.h
r71a4d7 r65148c4 12 12 #include <ctype.h> 13 13 #include <string.h> 14 #include <stddef.h> 14 15 #include <gmp.h> 15 16 -
Tst/Long/gcdp_l.res.gz.uu
ra1da6f r65148c4 1 1 begin 644 gcdp_l.res.gz 2 M'XL(" +)(PE```V=C9'!?;"YR97,`[%M;CQ['<7W7KQCHQ<OOXT=U5]]MD(`#2 M'XL(",?V&%$``V=C9'!?;"YR97,`[%M;CQ['<7W7KQCHQ<OOXT=U5]]MD(`# 3 3 M`X&!)`A@YU76B%Q2"RQWB>5*'B?(?\\Y5=T]LR9]`6(CL"(]:&?FZVM=SJFJ 4 4 M;O[FM[_Z];\MR^)?+5]]]<5O^IN\P-OR[O6;#[^[??'X\7&Y++?W=^^6Q^N/ … … 123 123 M($T>K^>X1R7J_FT$N%*UPLJO*<Y`AN%.R$/,A3<\0R>_)GJZ5W8JDT,6*'I+ 124 124 MDEG?K-CQ^FE&8C+@SVN>:T%18`$FV%U&;38C2M[-\D%&D$-T3+6K6E_^I[UO 125 MVY'E1K9[UU?HP0][NE2>Y)V$<>8;_.!G`8UR[VFC<3S&2(9_W[%67,AJ:82Q 126 M<6`8=@O80F>RDF22P>"*B!7,4NQ^WR(/;2CO'4L2EXAWN-(4`V_8?7BIM]:4 127 MRQ5*AH:U82,HR[72L#_I:PZ]*?IGJR:&0%UM2JNJ,>!CN;:>Z7`%Q"/])K!I 128 MN-:4I:M1';E=0J,#\O>MTK%(VE::<SE_LZ>P?S)617APR5FKO;K6;!K0PNVK 129 MA%L-JK&O&&Y<7FL,5YM@KIG6[*7%<(OTR^#$'H6PX*BA-8?YP>3/V@Y+P;QE 130 M82K45+>IL#08`X-BKV"HPW8\="%F4UQICJ'[`'\4(T<E6;<F$RR(B*K[VY:Y 131 MSN#'[-NH!`<P)`$Z<^:V0F<NC4#S?MN(5Q9%2N&9HER40V-.9\M,\%VV&WN& 132 MXQ.:<2;7?8".QI.&5-1U>-MR*K$+(/J8Z@QG&WPE]F=3^]2#[X)N3V];#_,' 133 MLG&I@@$MJ)_F`L+XA[LMS^I/%6Q.W?QMHP;.H3;,3_9"`?/-E&9)]B/X1PYG 134 MF\C0/)W9L_N&(Q=5N>70GFE$:`/J$-;BUIFRS,;VMXUK#M>L?6U_6TDM`(A< 135 M5=-J4)ND/"S$`'VX-7GT\&6G=+G%T)K>ZQO?8*GG\&K*55]]NE^@7J1'`$:M 136 M")MT.&`O%P+8#S5,AG(I\CI,AGSX1_+OLI0)F"M<4;(.Z(:YNF#K&_9F@:L9 137 M8%9,,\)GT$)?L6(7?$DR;?Q%I=--%*W@W2&X\)7YU8*7D>;:^!/ZY6950"W* 138 MZ!6$$4'&=]C$^$&^?2N5=H5LD_`5W058"V06+<0*!/7+P-,P@66B320:%RT# 139 M5LM*_K;4=LBE577L25_NJ](<@C=*1O>B\=%I6@#,O3+T2-_AA&?QNF">C$3? 140 MXJSS`JB?]#P.&%2RF*4%,8:6E,.;@E>@:23K3CI0,`@"+#%,;=*A)B+('LA` 141 MYGI5^A6ER5=2`<L%Y^5TU^::L$ARAW5T[RVC_Z+]W:57]04&'J/MMN"6%/,S 142 M7'IBO-/B@V,.D*/*$$A'UA4^/5'11>V:BD966^.5&0'NU;N+1H2%A1%H75Y( 143 M+*/+'7K2YD0I2'PHE__$9KJ2&X=5EC:&.'$*9,9@%>6:S*DY9(OC"Z[%%X!U 144 M1.]Q4;<FI`U4G::MKA"OBYY"P2P+4U<%2$(`9=L.Z1)-!&^FK%:^^94YN0)? 145 M3;SN(B>9[LZ<T#;BQ6R[+A,PD=:+MB>8'*@#T@ZZBLL72->=[DP9!LB'#.8K 146 MZ2[+1`PD(_7*4@(H:=*P>I8Q/@***EW7`T[9(=O(JVP$?'T*6$N8/QAXG5:G 147 M5`C[-B=UNL+R%"6&3@C.016S#[QGJ^K>UO$3XYDK11;/*S95]&+F/DW*9#N& 148 M"-`#30<Y%Y)(W70?>F_N?%TT;\7<D!F9/;OS6+0E';NB&CE4330/7;=E>X\3 149 MRF!?"VY%.U7TI'2UUVZ2)CH;E8@LX5WAI+BO1&E74<M-)770`RSF_*(GH*BL 150 M29NJE<I0%_LE`/X5ML>J)FZM5X[FG.A`OT1X@([SZ4'.AV,S3_4@(W$J,$Y& 151 M9L&!<43_)L<X<&4;:47JW28H+(&Y[>-,9UG8AJ(1NMF&LF`WIH2#JQ\.41%A 152 MV]7DH@XEP`#]UG[X0P'W#X=HYNY@?R]-]*%#M(57"^9?WSA9`XCN%B?FL=NB 153 MJ0,:\<"(\(5I6'$[1*?F*27ER!P.4>G"&54<R`\+AVA6/$4F=3VB]3!;#IR# 154 M^=OQ^LMSP&2CB-[!'QJ^9*`9V4RRHYQ>EM\6?!IXH")&-P^[4"2U1K2^KQ+1 155 M^GIBG'RE#2(*]7L+GV@KV0Q#.`>BJ<QLAN@?Q&.8MUWIM'H<"M;JR$?,OHBB 156 M.;RB@EZN,`Q%+"VS#2'9Z"`D(/<C9"]V;`VWJ,QA=90C(G#8AF6.;1MVG%BA 157 M*`=>>:-7BLU_X)PYZF$>RE:T/:/%L@/RM0[K,+>P]ND*&&X>9F-KX^[5MF]4 158 M-C$?,@$WS9`1\*VF34(80FR0)=8=2368B/6R`,A0BZ<=L.CPI!8F&GP3N.&H 159 MK"@+(IQO,@\XTL2-SZS,4_QJM+"&Z);+^?#8R5;4NQN?*X4?+X1);,JR+7^Y 160 M:M/FEZZ[JGF1&/@9V#=C?%.8V3`\EX?<Y6)8=N9M1X!A3Z96#J-3!-K<V'+1 161 M-/P!TW2J.\NMS@S\&6:G;!]I.^LLLZ_#0;1.P[-N`P#.NU+-:H>YJ03\S"-F 162 M5K14;\RI"<L3'K[FEJ<8WVH4PZDWTZF6>[[B*41[4SCLADX0E/7([9E#U<.- 163 MACC_\H`3G7G+_7IY[G?2G(,GC]VTP#XN+K-R$[-!PM"'0V9NTYB75W:]7"P# 164 M6/Z,1V!5MG$J97G#'"PJ40S%6%1BOX7+`[IW>YP0H4AS<STL/X5:>4;DCZ2I 165 M64_CLT7$"1?%_75P2<13B#>N&HH%N5C-%0OD8#'U0N-7Y4DQKXAPD-_A?#)H 166 M9KLWE35E:KGG'7A#H*K;,H(NEA5F]V7S:(>[3N#\%;H<>[YSR2`J8_IML6T. 167 MK2P24,*9F(\-%UFE5_/;5]KT&DQT/8E4S/,RI;PLU0H."UVD$:J*B;V0KWJ% 168 MV6F$9>KMT$"B@?/T369Q?"ZW.I5Z1EY=]E>A^REF%.JXC`A'RV)K=C?X*IC; 169 MO6$R*Z>.4,>3"<#(QIWM,#S3"B<TKJ[F(>G:G`WKLTA-$'S%!B*B^3<:R%[] 170 M61V7(Q12_D&NC<!26!:R`Q*^-S'.8)MUQ_?`'301`//%1*@-EH\@6$/W8C41 171 MFXOF`F(5Z9''+R)S8/L"`D>!,0?+!'&X5_FI$CX009*5))6O[E$ID#&N9K!> 172 MU`B"/;)N2*3("(FY639HEN5+K2;&S-:@Z;$8,B.F+]>"702Z=D7S"S&W7'LQ 173 M3"_"#1/]+LL1=I6LH09$SV@3*3&BJM&_/AJZ/PL,PWJI75E@F*Y&P]/()J+J 174 M!(HW&D>`\]*O1*.B,6Z7"Y"RF(8YP'QA!Q?,,(`9406OR+PM!N5%_.!"&(4\ 175 M#Y$^6A1JV"PR10CEX<Q6DT,&L/=B/!"9&]J%J5XC<W(0U5N"<!3()U9>C=!3 176 MLMIEPX**L&D;#9XBT`/C*]83#($^8="T+^'Y$I[_?>%QM70$+$HUHM$*>-M( 177 M$`D"3)MT"^CNR(MAOY*-/T!THZ=_:TERFZ=NQ`UGSUUV6TR,P)G(MZXS?+.- 178 MR&RJ)FZ(#C!$Q]LI@KRM\<0,WQ\;MN%F=J)<:"8R[K8K-'B]B5$?+U1!=]2] 179 ML55&@)K=OC:GJ"&I(DA1FOIM]EX#K[DPL05_#C(C]"$0QZ[`IRW3'C#LCCU9 180 M\[CQ9^_5=_RF!Z$$XRF!_6A#1V!>--&<Q))X)[B`]WC#-C(;MC&'4;.GR,&- 181 MH'J%XW\'R"NC9!8:J60T-_L9G&B.:BM(0BTL7UQV#\4CB7AIOAOND[^D#X$_ 182 M%#(D5]7I-I7<2_)!D'><>CS"S=?A5>V,0.HT(5L>Q#O]DZ=VV#.(HJ\2;]1` 183 MCE0!JLS:)N+FGRO%,%0D#+5H"5#,+0*<6:,$H@KX?FV.&29]Q_R1G@\RESZ$ 184 M8Q,U8P;.QA(CQT!Z0'N<BV*T-'JRF![/PU*"L8H,?W5&Z!-)E(,Y6^3OJ?:- 185 M_,4\>'N$@#RLCGKM:&5EH,B.7Q$K,B(!9=U&#[2(`R5&L_!+(1E;T]80%P@I 186 M+9CW%20!G-TBNE(;XD4M=A])M_$43+04E%I<#@]9RX5EQ8W;;!&Q*5CY82T7 187 MRH%%A)$U?EV7WX?OTA\209C%!Z'@*)W+^D;N&`E+A9R+$.R"Q5_V&^%R6'!1 188 M+F;WTX7ZBB54F,$9P5RRLLV'5LB\T*1U^O8#TA;L5"/(++A<TT"M7$S-,"O8 189 M,=V$@G$.7_>VVV6G,7'C@4:CV7T>*Q!VNXA;`'I>+A\&V/3U,JJ-F!%!Y\Q< 190 M^>.PW=-T_B2CQA;_A;;8+HW,Y3X/LDT;!J(90<[-DO)E]*XS:-PVU10$FQ76 191 M^VS3SF!:?3L%X2*Y8HO`F3W=0Y^,)J_(PULA0;#613@.XSU9%!.LF\N.<&KL 192 M2[@6D.'2RV&\IUA'+%/F!XSW,O<HP%HO1]A8%(G'F@M#DO7%(LAA?9(Y&I.4 193 M=?UOA^JZ_%RIUG;OX#];ZS#=X?U*;KJ/5NUTHLQ<RNU0W1D-I-Z4'OE/<VH" 194 M*'G$.[)(:D7L*Z34Y"NH-F!WV/UV1HU%H8=X,[D-^6KN4!UANK>V`Y\`#'W; 195 M^V#G)Z,8PKDZU(UX\"S*$?_#(=1__9=O:X0QV^CW"S=>PYE,%A'%WWJ(EOPU 196 M]QI3,..31]CCFP<NUK7\5\&P`(`1)1B(!9ZF;+1+P!SF$`'\E!$Y!8W^IQGM 197 MT.EG:@9E1F7C_1[>$""8'%JP,;.D78YR,M>$_CGV^A(,0X)7`!T!)R;YN.B+ 198 M7BLBG1F<(L$PJ^1XJ)#6-1SII*1&?2-YK!Q()V.\#Z33BZUEN5B:;]K@I]JT 199 M&H$P8\5>(%<UNR6->,%JCG.,[&4X!Q(8D.I"KOOE0*?IB<H*AD+?`L"``KEQ 200 MC@QXN0+GC*5GDHDTM'"A`,K439RO=/Z60#E53Y"3/]>(B']%]L@50B>7O?D6 201 M+PIM5KO+(U,"Y=#M$2@'+L(1**=V/T^O[==IM)%\AN1R73E`CB!)>E$`A60= 202 M1SLB"C.2!P!FA@4$*J(#>@`;H$\-FE1E.#=8&;A<*P7$R4D/],&?<Y,':]"? 203 M#>/(_#1'.4/SVH%W>@H+0P!,F1N&PL/4C<5>Z7ST4V4$=^9HAR2'&F]$ZF@) 204 MH)-A.NJ?9:?C`<+TV*0*3[\QYRHN+CW87?Z<!V0A$S[B(L`VHY@O#67TLQGF 205 MV2`>9]NDO><0]S13ZW+16K*C#,M&KT`Z.=A\1#K3F;$B`(6<#`5`X6C'V5[I 206 M!#IP]B9'.HRCZY_E:N%C!K3)95-PH0O:%4@'"][NRZN.P$=P.H_P1!8BX"O` 207 M3M9#&'!Z@2X!@SHXA#V@)9!/-U)4(?5%SZS*S-X[HA1KLPT+>5".JD""2?:C 208 MLKVQA?M6R!TPS>7"6NB`[/:S/H*JA"A%8F):0)U4#8C)1;74#ODKAT]_BC%_ 209 M'3&*,&2(;?281_[9-\D+F3`S`HS`-MWHJN07ZPD8^)4:;8%TKJU_`&FH!?5O 210 M4#:;W3Y"F23$C7`Q&UTN.=:1Z>M&D,OIH.YBRNL.;N`DBAY0IU_9?@2ZT,&0 211 MR]#+&^H@-'8%U"EM&M21GHX#Z^2R]TO2XIK9WKS0(]`R@O^;5\=,IR!Z$?M4 212 MCR:1=7P9VD'&V9'N+4,QHBD[-2[BQRW9N8W`P?VDR;6=[</XL8DK\[WU?%)& 213 M,.;.U\#>4#=U%ZZ057:L8MBQ,)/#?``>D)HWX+&D([NH^;)#SL;846<(Q09) 214 M7<\M\D!%*BKDZ6!)E8,#4'YS_KFRI!";@Q/ORIGI:"F](B8/-U)3+]PD>439 215 M#'<Q#<<K<DKH18(73A`P$_H6F345N7!WT9%,?*BW;[.GH7D79-8@<5):$'V( 216 M<I!_P%>GFZLKW0$F+_QL%6Y&`0W?\(T%$'<FR#6P^49]Q=$69*<T..*6F)5D 217 M;61Z"F&TO^)P"O81!!<QR-F&F#KL!&CH3."H3+]@2I\@%E*DZ*Q#IBD8+NQ$ 218 M95I%8U*@C-="&YUDLEGH3:N#^2.3WD"Q%%"^0$X!C9`M($<$IQFH/P\,HP&. 219 ME>8]5K!;ZIQ\RY640M0*W:D8QEI)CT'V)XX,HS.QKO)ZQS%%*`>UI3"U%%^F 220 M0$(BF"&@1-+964$3JE7>"$-P:8H*CE.$PQ"#6,$2`CF)F9^D(HGU"G>J[-.L 221 M`<[@Q!079&'!E8S,Q_MJ3'`I2R=A*&V%[E+17ZA?MCVT4$@2RHT.S;'(SVFB 222 M85\![C'&A2[A2[8+_`).1M)OD@@GCL9!)PH&L2VD\=Q7I<]73!T0D5;',,@^ 223 M]TU>"A6(`D$G!?-4T+CH%"W56ICZFA?)=#6+6&,O@5^Z8"`1LX/75D<22/85 224 MWC],5,E,@&4-M3%#!LXC+!AR<PK&411CHKB:J$WV006E7)QI)NT(FD$?"YE0 225 ME6R^S'&LG7Y;Y&YCH%=?<&N3'I3)#TH<@<7DU50;,G2!K%%.=M#JFH$K:DG9 226 M7`UN:>6#80SE92]2RC1/>#5ZCG4(R%1K$,+"XP/INR]8+:)=L_/6$*-D6`$] 227 ME,T-PH;33X*U)MH6OFU@!+8Q"NE>@J2<MH;%JE0KL!N137(A3:F3=$C:VM41 228 M?8#?G`,)+_NM*!$K,R$J(P,:+ZI-J`-\74Y:PXI46B(6'C]B(A),&IX3(RF$ 229 MR@ID&TC?DI4RDP4I2BF4QZHN_"2PDM3'HLG$_0?J2+B@F9*<&B6?Y$1*JNE( 230 MG-A#P19K!?7,"XL?&L^4I)COVLQ`)`$\J%?-P38E><<V0NVD4DNN*8G_R90D 231 M5$W!I,UKD,,IZPJ965=Q)2GHII`HB)QMS3"75L5(*9>IR;XT()%E`"A:2'L& 232 MA_(:KB5%=IA<+6-$,FNEDBB-JA9Z,GE/Q<!D3QOHL#ABVO0D#C!A-R[&E$PP 233 M9!-P-8E4-G)RJ8<FPQ9CD,9)19F-BRCX7[.K!7B3[CI"5ZY)*F'5'/4LH_YZ 234 MEQ583%?6S,F`LYB[!>>TCC%,5XH*8YZ\S"KIK&)[HY,X(\24);_LLS.\%W<+ 235 MV1$NTY78.%[5!<C0CFY(I7`%45OB`T-5*:.9E-O.J:BN*Q&BAI98"S-^Q\D7 236 M2*,G41&Z$OLQ]P-())+\DK0@;^J*4K/\I)"[R85^DA(\35&"O4MM+:^`YSN( 237 MD+);)=>48@I240)X(GPD1K3T4#,>BS)3L\:GDJ;1"QXLI"F2Z0A5*7LAWQ'T 238 M26Y:&?S7-;C\H"O;5;0"?4<!/=PRF?,(52DHR\XKX&$!.#)=1J&UXLJR3MU1 239 M!S,=)]8Y5$@V58FUSDT+_AL=1='%LNL7TY6(W)!X7!EA1,`-)^%>IBFQ74!5 240 MHJ0H]JB%FQHE@;JR%"9,+FHAV6/E#7OJKBEA>7`>*$A%C!29I4N+BR9K@OJ, 241 MP"C$8+14&25MH28UB@IW"U488ID8H[[9O5GE@,)<L;UAOKE?44V68CFBLE7@ 242 M)2&K,/JGZTE$4XQ<S5U7@)K\(F>E?VLDDJ/($_K),9XDRF<QX$Q10F\C%#LU 243 ME)J`4N0Q5:3!22T'/:V>G]D3:7XZ`+/$(9(_/7YZ^]-/@E;??_KXT_%9N53S 244 MT_/EW^^:Z^\><_F/Z_R#`R__X*%HKOWE?^''Q^%H=?BIEO]1_K]_,OUDR^?; 245 MQ]CQ(V4H1789CHEZ_"RVQ)M8"=_EW\?/^#3!A9N7W*QR,\M-.`0N_>UEOZTO 246 M[U)0[OKK)7?;RW>YTP$K^--E%13^LM[+_BDJ:"_OK)O1:SXPI:3+G<%S-^Q& 247 M8Q?>V8FQ;U?M`FLH]W%%!:BZ2X&\"S^9@/N#%7]G+9WXS>\V[1^KJ7=_R6'U 248 M#"GA^?J\V^7N8!TX;2EN=>V@CU-!6$E+FO41PPKG1CQ2K8_UY8-Q*+G=6/EW 249 MJP<./*VG60O%ZJG^KLT::%K/S]D'K5D#Z'R[5X2O'G*#U;.C1<<2*7-:T*V? 250 ME6.)0<A6TJRC33J*>T7N3?:R<"BEDF:WAW6R:B>U]F*U-ZWC9SN4Q4J:];+? 251 M_&Z6N\MJ'_=B=Z9UO.H(X^-]5C*LYXT]UWO=^MPA`%HO:_UN-?3;P^HL]F0] 252 M?C>LMY##O*WA=K"Q&@[`>EY!4KO4N!>/""+?3?I[7RZ;W_%JQYJ!E&5VEA/> 253 M=-@''YVV9IK_]#M6WN<%TV,IF4Q>=C/KR++]T2@!G?6N6#+5Q?$[UC^'7`]L 254 M40FR9<19QM%K>C=KUW2YW(K>];X52N'T.N1NUO5CJZJ:8#9;0S!'[;8OMNRB 255 MV:P@6Y^YA`30N61ZKZM-\F4BY2LKZTH74>E64JSKNHA0LJPD^PMP&=WG%D5? 256 M7YGB:$LI'^NKA$0N*RG685M+(5>^DKAN;OHB5M&,5<.F][J@O!\R>-!MVN=3 257 MHB"//ZE8PC7S$)3PO;P#!>3'F_R=W_/'[=L;;LM?F;;JE1^%15*",/<CXY?O 258 M+'W@I^\?A27I(=CRNS^5'D5^]U%^\`;>_O3G;X^SC3]K^V=#9SN[%?WMV5!^ 259 M:DC;\7<^XG:MQRXV]90AVYHR-0*D4\?^]=AQSMGR^SD$LMRB)M]@5!6/N+?W 260 MO8H?KRC(A]C9=T99-IZV0+;-@/C>8EHL2/I`MU8P\;IEWO7M1'=""%`947#N 261 MA;(J9Q0<>R'VA[COR[C>LS;JFXEOA>W>:A38FK4U"&+-H2-,3JURWTU\/^RW 262 ML@O.[1#QHB@XMD.L/][WG</WO>8-EY?G?:]8TZ[Z?2,[SFDZ/N68\"G'OQZ" 263 M0_2C&I1SZM#'Q&@O;KGI&I&*Z#H$J(2VR7HWA,KD1'<(UW"A8URFJ%]X:,4\ 264 M!*HZZEF]QI[23WG1764ZV@&./T2KF/H><"EOP6HA*77&?C,.*='M9JE\'"*F 265 MLC=@5H]#P&K(S,J'?/60F'S%]F.J#I._9:N$L/#UV[$R5%2JPYJ\!0Y?(#KD 266 MR@4.'V4ZI*J&]+".>JP)E9UY2)2+&D+IQW;B@E;98#X$^;-^/E!V_WP4T2?] 267 M7*E1YSO]BIT*]?MXKQ_(AQ4U#"W8Y3)K\1O4=)-K."#>\&25"_5)/AH?+?)H 268 MF8_ZQB<+GVQ5*LY\M.#1@JH+GRY\>CY869'+1OV['IW/4W%363W:&RO(JJ'+ 269 MD"8RJ\BL(E_21M'-!I6@B6I[@?E<UV.P"M0P'OV-3W]4+6S2@.Y5>#I+[;8E 270 M==L0)G[.7T.?/P8>]^XFJ0T/2U,_Q&!B-ZJ/8SRYR=3'\YA*,[CY:6#_;!-C 271 MPZN]C_'5%?X\PE;Y.<A6=3X'VNHN>[1Y_)IU2H<;O)S',=H\P?W38%O=QWA; 272 MS7F/.:&=O1GJ`1A?NK?KN.,'^7$,N^*48^31.=WT=1RR[_K?H^_)Q!1C[T)_ 273 M@&1\RM4V:-5VB$,]``G?ML(D<+."9.M;=6$Y;F]5>,]^VZQ0N3GAJ7^ZG[?N 274 M,YVZ"T_]A^GLWM`*5:Q*3C8*(TUM-1^:[I:/HB==9T=M!(1@;?.>VW7<+Z?2 275 MN\^\TE&83]4G[U;*+CS5WRW9&7L;96PE*#9*2T=I>=*%<*R6HS0_J<0T=Y&I 276 M;-D=[\7'V*"(M361OGV4U%.1PO^;CL+RI$Z+4;&?3!8S$X\J;2]"&-OOMD/K 277 M%]T[\YA'83TU-/@=YY.^`S1]W7P=98Z,8#S6Z27UV"&JO5@_"WV?4&NRUGJ4 278 M.4KJ9O\>16[=X%0\N^VXQ^U=,9/Z/,I\[VE\L^<RQU&=+Q;3<EH_8I+>H\`A 279 MD]O!_>X'5C^;/]U$\2AR`VA0%+WW!P3K[-]1X`80GBA[TSP^C9SP:60WK-W= 280 M5"EC`<**+:E!9$)MPA4F(&E>>N<)?>;0(<?:6$1DQ'T'O,Q;?[AHXSBPT!LN 281 M;/PX7D\."0-O(HJUE45(9N\U]$0)D2SC,E#H8H/3"T(_Z,.RMNH)"/,6/V0T 282 MNDJH(7C%JMAB@""C@[\2+A">1I:/U5]"HO!NL?9;"!-.15)<:+.NO=45KY7. 283 M^^!P^4+/(57X4MBQRFN(5+]FK'&7C>PUJ\""'.6HD/K4G!TS?!*N357B9G=H 284 MZ8ITV#*?X:W`*TP`YG5BQ6QU]'NK#BU=;P[=+^+WKC&G:N+L,-*UW]"QC/NN 285 M^.:>:%]%U6X?]LKQ]>[4/Q]0\WN&?B7T44._$/7HUJQH1U&,0P^#,4,!038@ 286 M8W!`(8Q"$T=Q*"ZZ^2LNT8W?(`FQ1J-!7QQ($(4JPB-0$$SY47_P7KJW(#IJ 287 MWH*GWG[J[%-7W6GPU-O\U-O=V<]=+9^ZFI^[6ME5'_O#;L37NQW/X".+RI02 288 M'3!MI7SH40+%>-)2,EZV.X+?8;4,`2T*:Q*DTF[GO$I1?]G.BI3O/<UU%FU_ 289 M1;K,D[U+#QN3QQ1.+VLOVZ&!S\3F5L^B[=?`1Z2N=9:=KHW%;QN.H_APJD'5 290 MS6C1MDQ4R7RH4LZ2[1-)3&$:9^'I%L%+MGD]E1_>$:J'86<?:_'A?T.2AW]% 291 M@GN'AA<2/DQSO*5OJPK]>&+%FN4L/1TL,D*CE706GVX6?/2JV3$)5AS>%@[2 292 M&.UL^<5\C]2^]S+B36USUC[)[IO+4]'IK>%18"6UL_QTVD`PZWQ^_O#=8*-; 293 M]>EI!R:FOWM?1^F+^5ZIPW<*@F%X=3O+&+=K#T/ZY!?B((_V].#I'I)![G6+ 294 M3/KD).*7^N99ZOBFV>XVZE/=X>+E)B'[SCB[]F*N:NX4"(?'L]?+&97A]TK2 295 M.@M/%Q63Y>VP`BL^'54BRJ,_%T>81C?[8XH\RK9\4[K5U<_"[+.@6]-8[>P7 296 M"HOO3V%GF7,J//@R2=5I]%IRAHAPI&<=Z2@]W6M([.\QP>OE*58D$]1:.IMT 297 M/[>&]P#(SV:+3X_NF_S&V2[-/C]3=W(SZ;:K+:%32S9TLP0=1^U(%4^L*?TH 298 M.\-5.%,OY&6^/(>L>(YH*"B/2#J@G_*B,8+N-E[V)OS^>#D?+3YK&BQ:]2C+ 299 M/FE+<=LN0@&Z0V6XED\T]A>/C?";[WT>)6?0+)&!7X_2,W"&;U;6&#B+E0:" 300 M7+>Q!\=#IF9*_*QG=Y:CM/I43H5`S0_IW88HYW*IN7SV*?M4RO,?NZB_G-$[ 301 MJ$+/M=&R,Y*'(]3G.`K/<!Y.F?#LV!VZ=2M&UI^?U+K=[<M>!!]K64=9]7E< 302 MG,=Z]J?X/.(U9"*U!%MI!)GPN1<?M*:O%W`91T&N<1VE\\#,_-QK;ODH'@=X 303 MQF>&ZCH*`T;K9+4ZSM+FD[6H%I]:K3Y3?(UR]Z5>]44<B2=\R?@H6@<:3Z2" 304 M]O/)>8!R?#TY9,<#U(;-^9FCL]YNL[$X&]%3M\PY&>RIK"HK*];30/:)A[/- 305 MLWP=`!]?0PMAM4AWH'QD?,QV':7#AG:]F-MY%W4?5_9(!M;*LO?(;01\M.HH 306 M<WMPZNB4\[EI@[,4]=2CR-WU;*V[YO"VW,#`MQ.C9-FK+2KK_83'$UC5D3/7 307 M#]_VN,),QXD'90-:VS;VS<"JZ::@^4"QNJ/>6Z?7W^"KH5">"-&2WM_X4Q6@ 308 M5F.X5;>Q,K5%!ZPEH!Q2"`*J!JI,2E#4DHTF5W1=0>H'O\B,CW@?T-1@HB`? 309 M),P>F#00(DES-*,-D#HXE#FM2+)@P0:%\[[L9<O+]AKB[.Z>RPDR`_`5?I@X 310 M'CE]AG@W63K7QI<.\V2><;2;>E$"WHV[\UL,5[)M'*L[Y@DF`[J)`D[I"4<& 311 M:D/6J7MY?SZ]BC)Q'0>.!8!TK#9!'K[&BWEN`J/UN^9G;VP8F`6(O]03%@8` 312 M*W!@/6'"`%\)O)8Z3D#HR&OQK(4###KH&O@<4'LQ5U&@+7X%.BA2(9L(RFXG 313 MTNF>A*S@[*$#]06,RK>13H]V0"A^BZ=&,X=C$EN5]??:!L1X,7_WCE8&:*K. 314 M]EEN5#AH@*UR`KB`1.56<"+U1F^!AQ+`YCR0FV,A&++XSOU&;0Z$Z'2;;0,V 315 MAT`M^$#K1#]!G#"H9MV%WVL-]XB=7E(@\VOU`Z`%N,'I,"<X<UP#_;JNTR7O 316 MH&;>J]<4,CEC=.?&9(YCZLV))B/L!=WF24$^0%7@%`"RW`Y$%2`%'Q"O7G*Z 317 M61=UWPFD')UP>)<3U\(R6$\#W`WXFU;S"7&0%/`#;JYZ`J2`'CQ?F-+E\,AA 318 M!Y:W4X]<L>DFCF9.IV"@C7X_X(VW+2O+^4>.SVW?SB>@"0"!SY?BP.F-9AP^ 319 M<+#F&65V\#!N[GUWA-SMM64,/4CL\%CWZ(@T^UYD^[./NH,01P/S?B*(V.OI 320 M10VFDB/3&2^RW%OHL%0WYY,;YU!PFK8]BAP&+O9M[]SC",J-S^>(?78F-@:E 321 M$4-L&DH>[_T#OC$+)'>YS!IVSA:4[G"FM8=%I3L];6^-_KN.6"$T#Z/*X[VA 322 MJJD1Y2Y7ZNWK'E)N<@L!U&(1Y2K7R&\00;6@<I$[4F5YL($L5])5&8/."+,% 323 M=T4BND:9+;`+YK6'F3VPNWJR4#/<D(PF2\^*A:XKPZC@0]&S63^&IHQ<C>%H 324 MC_1>J6L\.L*\+7<+25N4%QS[)&T7<V!V938A4%_5@RE52[O2COQ-VCD^AO!8 325 M1]27R0./^;:#OO=<5Y6FCZ`O7;J=[<B-H<U<TG*E_U-JSJ@7!T!YT!=LVL=Z 326 MBZ!OQP^F^H%9`[8Y::7`0SIO2G9\X%CK[QK;!VZ0&E$#?J_E"Q5\S!]<CMS= 327 MZY*T';Y;F!C5?ISRQ*CVXY-,_5D%]!2L0ZX^2U6XB4.NM)G\+%K:4CFD2UNJ 328 MGR0L?Y*PSP+V6;RTL6<!T[;R*6/:6/DL9N63F.7?B-EOI.PW,J:MA91I2_F3 329 MH-7?"%KYC:#EWPC:9SG[)&7MDY#53T)6/@M9_B1D_5G&VK.(51,QUVI'"''4 330 MD]D_VE-F0/T7I=A_(\?^I]_F!8S^]/3@T__I_6U_KOK[W__VKU+1CZ]_?_OQ 331 MU_>__?)F=\J/_^.__/K^XW][_?OKO[[]^O;W7Z*2R4H>[Z__]:]O__G'7_^F 332 M??'/6_^RVUYGV_/:.0DS_6Y.PC]ZFS_(2/B'CT13^2__]$^/49_U=[,19OO= 333 M;(1YY#',\96-\)6-\)6-<-@&_T0VPIS'"EI?V0@O7]D(_\>S$=:U97"E/[0K 334 M'AEXPA(.@`-`-]!L`4TN`./?$A"8&/"6F3O@R08?!>D([Q_EW[`F[WD^WJ)\ 335 MY11\Y13\DSD%JQZ"T[YR"KYR"D)V_BUS"M:!E=?X0RU;'QT<>/AF!@GKR!QH 336 M;TJ#)[=_&M6\S$=_,PY[KC"GS+)5[M52WKC2_\>;TM&13"`VKAJEFK)0S/Z= 337 MZ@8@57P\YINRS)DKT.4)M2X+VBEFPC))P(QEI6&M-S++-2-`3'>:CT@N:/(0 338 MC=$[W3-F\6IF@/P,1F*&WT/-2S12U5+]08?#WLE&I,:`*&O,1D27V1Z4OL=$ 339 M66,^)*3H^Y#HXCI&I1Z#HG0R'14EX/O`D-:_1T:7V#$XY]CD/39*VH^A:<?( 340 MY&-DM%T;&N.XQ?`<H^,R=2#)M;XH^U^4_2_*_A=E_^<_HNR+3@J=D:_T1=G_ 341 MHNS_?T_9SU<^UD3Y0YQV'PGQ-&SQ]U1SG@_=NW%4488KG!$#@7$BAH]FI':` 342 M'V7`Z^/8WPE/2FL"LT!IQQ,#0$*9[UY;5IJ\_*X_Q@?\G@W8X1VP)&E@#S#D 343 M!^V1P27MD0`+ZXW!)>N-)1!XCVZ[-P1+VIOH"6NQ7B@Z03<4F;`?M^B##V`] 344 M!K-]\>Z_>/<O7[S[+][]6?C%NX_2+][]%^_^BW?_Q;O_XMW__/\<[SY?_8#" 345 MXXMW_\6[_^+=?_'NOWCW7[S[+]Y]@)#_&WGW^9K'SKW^V",H^!!'KX$R39=@ 346 M8;RR?8"_5Y;&+/O'3:S8S)`E8[57[TU#EN`\-Q%KBUKVCWQO:3)HR6!M:LT" 347 MN96>P)XL:-D0U\6#&K?L^'&MM3-NR>"DU#,U<HG0)$[Y[A:Z1'RRB+5ID<L& 348 MGQY[J^%+D+:7[%>/E)0*W'N?#&6265QG6A;,1&RSYS0LH%D_]-M#EP4U&\/" 349 M&)^WIM1OV6QJ>B0-_N*L?]#:WQCA%*NP#8U^(LIYEQ]Z^!.\:(QMLB!H_="Q 350 M1BRZ&=.[U8D.OX%KC"_;@1Z?P5.&09D0?2UD/2,`B-AZ56JU5E.D&G"XK7O7 351 M6_Z8^)R,=$<&8-[I@>UO&-=I,U[?,$-30]6=FX7-/..[-NMD__NLSSWEZ3HF 352 M7&GC-N4W,M1CQC7)8D\YO;Y[PC4OP./T8)OO"6?JQ#'A94_WK1U3K<D%.M7& 353 M(_>Y5KIZS/6-N1=[KIG>$5-]CUF^6;J!!K))(X]9)BM]SS)S+/8L,Y4C)OE6 354 MC@FVE`6=85+1;8)O]&CO^46*AL\O3[_1N?5.Z>22NFZSRVP+F]U;3*RM_W3] 355 <A6SL7WY]_?6___(M_>D__+L?_B>&O>/$C-`````` 125 MV['D1K9[UU?,@Q\T5=J>3-X)X\PW^,'/`@KEZFFC<3S&2(9_W[%67!B[1R., 126 MC0/#L$M`"Y7)G223#`971*Q@UFKWQQ%Y:$-Y[UB2N$2\PY6F&'C3[L-+?;2F 127 M7.Y0,C2L#1M!6>Y]3_N3ON;0FZ)_CFIB"-35IK2J&@,^ENOHF0%70#PR7@4V 128 M3=>:LG0UJB.W:VAT0/YQ5#H623]*<VWG;XX[[)^"51$>7'+6VFBN-;L&M'#[ 129 MJN%6@VH<.X8;E]>>T]4FF&NF-4?M,=PB_3(XL4<A+#A;:,UI?C#YL_5D*9BW 130 M+$R%=K=C*FP-QL"@."L8ZK"GAR[$;*HKS3EU'^"/8N2H)-O19((%$5%U?]LV 131 MUQG\F.,8E>``AB1`9Z[2=^C,K1%HWN\'\<JBN._P3%$N:M*8R]DR"WR7X\9> 132 MX?B$9ERWZSY`1^-)0RK:3MZV<M?8!1!]O-L*9QM\)?9G5_O4@^^";K.W;83Y 133 M`]FX5,&`%C2RN8`P?G*WE=7\J8K-:9B_;;;`.=2&Y<E>J&"^F=*LM_T(_I'D 134 M;!,96MF9O89O.'+1E%L.[7G/"&U`'<):/#I3EMD\_K9YK>F:=>SC;ZMW#P`B 135 M5\VT&M0F*0\;,4`?;DT>3;[L^[[<8NA=[XV#;[#42W@UY6KLL=POT"[2(P"C 136 M=H1-!ARPEPL![(<6)D.]%'DEDZ$D_TCY398R`7.#*TK6`=TPUQ!L_8J]6>!J 137 M`9@5TXSP&;30-ZS8#5^23!M_T>AT$T4K>'<*+GQC?K7@9:2Y=OZ$?KG5%%"+ 138 M,GH#8420\0,V,7Y07G^LC7:%;)/P%3T$6`MD%BW$"@3UR\#3,(%EHDW<-"YZ 139 M`:R6E?SC5MNAU-[4L2=]>>Q&<PC>*!G=B\;'H&D!,/?&T"-]APN>Q>N">3)O 140 M^A976Q=`_:+G<<*@DL4L+8@QM*4<WA2\`DTC67?2@8I!$&")8>J+#C410?9` 141 M!K*TJ]&O*$V^D0I8+S@OE[LV]X)%4@:LH\?H!?T7[>\NO:8O,/$8;;<-MZ28 142 MG^'2$^.=%A\<<X`<389`.K*O\.F)BJYJUS0TLON>;\P(<*_>0S0B+"R,0!_R 143 M0F(97>[0DS872D'B0[G\)S;3=;MQV&1I8XAO3H',&*RBTFYS:D[9XOB">_,% 144 M8!W1>US5K0EI`U6G:ZL[Q.NBIU`PR\;4-0&2$$#9MD.Z1!/!FRFKE6]^%4ZN 145 MP%<3KX?(2:&[L]QH&_%BMMVV"9A(ZT7;$TP.U`%I!UW%Y0NDZT%WI@P#Y$,& 146 M\XUTEVTB!I*1>F4I`90T:5@]RQ@?`46-KNL)I^R4;>1--@*^/@6LWY@_&'B# 147 M5J=4"/NVW.ITA>4I2@R=$)R#*M:8>,_>U+VMXR?&,U>*+)XW;*KHQ2ICF93) 148 M=@P1H`>:#G(N))&ZY3[TT=WYNFG>BKDA,[)&<>>Q:$LZ=D4U<JBZ:!ZZ;NOQ 149 M'M\H@WTMN!7M--&3TM71ADF:Z&Q4(K*$=X63XK%O2KN*6NDJJ9,>8#'G-ST! 150 M565-VE2M5*>ZV"\!\&^P/78S<>NC<3370@?&)<(#=%RR![DDQV99ZD%&XE1@ 151 MG(+,@H1Q1/_>CG'@RC;2BM1[3%!8`NO8QX7.LK`-12,,LPUEP1Y,"0?72`Y1 152 M$6';U>2B327``/VVD?RA@/O)(5JX.]C?6Q-]Z!#MX=6"^3<.3M8`HKO%B7GL 153 MMFCJ@$8\,")\81I6/`[1I7E*MW)DDD-4NI"CBA/Y8>$0+8JGR*1N*5H/LR7A 154 M',S?B==?G@,F&T7T#O[0\"4#S<AF4ASEC+K]MN#3P`,-,;J5[$*1U!;1^K%K 155 M1.M;QCCEN@^(J-3O/7RBO18S#.$<B*8*LQFB?Q"/:=YVI=/J<2A8J[.DF'T5 156 M19.\HH)>KC`,12PMLPTAV>@@)*",%+(7.[:%6U3FL#G*$1%(MF%=\]B&`R=6 157 M*,J!5][HE6+S)YRS9DOFH6Q%QS-:+3N@7#M9AZ6'M4]7P'3SL!A;&W>O?GRC 158 MLHGYD`FXZ8:,@&\U;1+"$&*#++'A2*K#1&R7!4"F6CP]P:+D2:U,-/A1X(:C 159 MLJHLB'"^R3S@2!,W/HLR3_&KV<,:HENNE.2QDZUH##<^]QU^O!`FL2GKL?SE 160 MJB^;7[KNFN9%8N!78-^"\;W#S(;AN3WD+A?3LC-?3P08]N3=:S(Z1:#-C2T7 161 M7<,?,$V7NK/<ZBS`GV%VRO9Q'V>=9?8-.(AV-CS;,0#@O*O-K':8FTK`+SQB 162 M9D=+[94Y-6%YPL/7W?(4XUN-8CCUUIW5\BA7/(5H[QT.NZD3!&4]2W_F4(UP 163 MHR'.OSW@1&?>=K]>6>>=-.?@R6.W++"/B\NLW)O9(&'HPR&SCFG,RZNX7JZ6 164 M`2Q_QB.P*OO,2EG>L`2+2A1#-1:5V&_A\H#N/1XG1"CN=;@>EI]"K;PB\D?2 165 MU&K9^.P1<<)%=7\=7!+Q%.*-NX5B02Y6=\4".=A,O=#X57U2S#LB'.1W.)\, 166 MFMGN+65-F5H>Y03>$*@:MHR@BV6%V7W9/'IRUPF<OT*78\]W+AE$92Z_+;9- 167 MTLHB`36<B25MN,@JO;K?ONY#K\%$MTRD8IZ7*>5MJ59P6.@BC5!53.R%?-4K 168 MS$XC+%-OAP82#5R6;S*;XW.YU:G4,_+JBK\*W4\QHU#'=48X6A9;M[O!5\'< 169 MG@V363EMACI>3`!&-N[JR?"\=SBA<75U#TFW[FQ8GT5J@N`K=A`1S;_10?8: 170 MS^JXIE!(_0>Y-@)+85G(#DCXWL4X@VTV'-\#=]!$`,P7$Z%U6#Z"8`W=B]5$ 171 M;"Z:"XA5I$<>OXC,@>TK"!P5QAPL$\3AWN2G2OA`!$E6DE2^AT>E0,:XNL%Z 172 M42,(]LBZ(9&B("3F9MFD658NM9H8,]N3IL=FR(R8OEX;=A'HV@W-;\3<2AO5 173 M,+T(-TSTARQ'V%6RACH0/:--I,2(JD;_QNSH_JHP#-NE=F6%8;H[#4\CFXBJ 174 M$RC>:1P!SDN_;AH5G7&[4H&4Q30L`>8K.[AAA@',B"IX0^9M-2@OX@<7PJSD 175 M>8CTT:)0PV:3*4(H#V>VFAPR@&-4XX'(W-`NO-LU"R<'4;TM"$>!_,W*FQ%Z 176 M:E&[;%I0$39MI\%3!7I@?,5Z@B$P%@R:_BD\G\+SOR\\KI92P*(V(QKM@+>= 177 M!)$@P/1%MX#NCKR8]BO9^`-$=WKZCY8DMWGI1MQQ]MQEM\7$")R)?.NVPC?; 178 MB<R6:N*.Z`!#=+Q]1Y"W=YZ8X?MCQS;<S4Z4"\U$QMU^A09OKV+4QPLUT!UU 179 M;^R-$:!NMZ_#*>I(J@A2E*9^F[W7P6NN3&S!GY/,"'T(Q+$K\&DOM`<,NV-/ 180 MUCQN_#E&\QV_ZT$HP7BZP7ZTH2,PKYIH3F))O!-<P&>\81N9#=N9PZC94^3@ 181 M1E"]P?%_`N2-43(+C30RFKO]#$XT1[4-)*$>EB\NAX?BD42\-=\-]\E?TH?` 182 M'PH9DJOF=)M&[B7Y(,@[OD<\PLW7X54;C$#J-"%;'L0[_9.G=M@SB*+O&F_4 183 M08Y4`6K,VB;BYI_[CF%H2!CJT1*@F%L$.+-&"40-\/TZ'#-,^HGY(ST?9"Y] 184 M",<F:L8,G(TU1HZ!](#V.!?%:>9#$]GH>E!&,5&?[JC-`G;E$.YFR1OY?: 185 M-_(7\^#M$0+RL#K:=:*5C8$B.WY%K,B(!-3].D>@11PH,;N%7RK)V)JVAKA` 186 M2&G%O.\@">#L%M&5VA`O6K7[2+J-IV"BW4&IQ>7TD+5<6%;<?%T](C85*S^L 187 MY4HYL(@PLL:OZ_+[\%WZ0R((J_H@5!RE<UG?R!TC8:F2<Q&"7;'XZWDC7$X+ 188 M+LK%&GZZT-BQA"HS.".82U:V^=`JF1>:M$[??D#:BIUJ!ID%EWL9J)6+I1EF 189 M%3NFFU`PSN'K/G:[[#0F;CS0:':[SV,%PFX7<0M`S\OMPP";OEU&M1$S(NB< 190 MA2M_)MO]7LZ?9-38XK_0%L>E4;C<5R+;]&D@FA'DTBTI7T;ORD'C?JBF(-CL 191 ML-Y77W8&TQ['*0@7R15;!,[L&1[Z9#1Y1Q[>#@F"M2["D8SWVZ*88-U<=H13 192 M9U_"M8`,EU&3\7['.F*9,C]@O-=U1@'6>DUA8U$D'FNN#$FV%XL@A_5)YFA, 193 M4M'U?QRJ^_)SI7H_O8/_;.]DNL/[=;OI/GNSTXD*<RF/0_5D-)!Z4T?D/ZVE 194 M":#D$9_((JD5L:^04E.NH-J`W6'W>XX:BT(/\69R&_+5W*$ZPW3O_00^`1C& 195 ML??!SK^-8@CGZE0W8N)9U!3_PR'4?_F7'_<,8[;3[Q=NO(XSF2PBBK_U$"WY 196 M:YTUIF#&)X^PQS</7.QK^Z^"80$`(THP$`L\3<5HEX`YS"$"^*DS<@HZ_4\K 197 MVJ'3S]0,RHS*QOLCO"%`,"6T8&=F2;\<Y12N"?USGO4E&(8$KP`Z`DY,\G$Q 198 M-KU61#HK.$6"878M\5`EK6LZTKEO->H[R6,U(9V"\4Y(9U1;RW*Q-=^TPT]U 199 M:#4"8>:.O4"N6G%+&O&"W1WG&-G+<`XD,"#5A5SWRX%.UQ.5%0R%O@6``07R 200 MX!P9\'H%SIE;SR03:>CA0@&4:8<XW^C\K8%RFIX@)W_N&1'_ANR1*X1.+D?W 201 M+5X4VFIVET>F!,JAVR-0#ER$,U!.&WZ>7C^OTVDC^0S)Y;Y*@!Q!DO2B``K) 202 M.HYV1!16)`\`S$P+"#1$!_0`-D"?%C2IQG!NL#)PN?<=$*?<>J`/_ER'/-B" 203 M_FP81^:G.\J9FM<.O#/NL#`$P-1U8"@\3,-8[(W.1S]51G!GB79(<FCQ1J2. 204 MU@`Z!::C_EE/.AX@S(A-JO+T&W.NXN+2@]WESY4@"YGP$1<!MIG5?&DHHY_- 205 M,,\!\3C;YCY[#G%/-[4N%[W?=I1A/>@52*<$FX](9SDS5@2@DI.A`"@<[3C; 206 MZ\Y`!\[>VY$.X^CZ9[UZ^)@!;4H]%%SH@GX%TL&"M_ORJC/P$9S.,SR1E0CX 207 M"K!3]!`&G%Z@2\"@#@YA#V@)Y#.,%%5)?=$SJPJS]U*48A^V824/RE$52#"W 208 M_:@>;VSEOA5R!TQSN;!6.B"'_6S,H"HA2G$S,2V@SMT,B,E%L]0.^:N$3W^) 209 M,7^E&$48,L0V>LPC_QR'Y(5,F!4!1F";8715\HOU!`S\2HVV0#K7T3^`--2" 210 M^C<HF]UNIU`F"7$S7,Q&E[L=Z\CT#2/(E3M1=S'E[00W<!+%"*@SKF(_`ETH 211 M,>0*]/*!.@B-70%U:E\&=:2G,V&=4L]^25I<-]N;%WH$6D'P__#JF.D41"]B 212 MG^;1)+*.+T,[R#A+Z=XR%#.:LE/C(G[<;SNW$3AX9)I</]D^C!^;N#+?6\\G 213 M901CG7P-[`WM4'?A"MGUQ"JF'0NS.,P)\(#4?`"/)1W912N7'7(VYXDZ0R@. 214 M2!IZ;I$'*NZJ0GXGEE1-'(#Z=^>?*TL*L3DX\:Y2F(YVWV^(R<.-U-4+MT@> 215 M43;#0TS#^8:<$GJ1X(43!,R$ODUF34,NW$-T)!,?VNN/:]Q3\R[(K$'BI+0@ 216 M^A#E(/^`KTXWUU"Z`TQ>^-D:W(P"&G[$-Q9`W%D@U\#FF^T-1UN0G=+AB-MB 217 M5I*U4>@IA-'^AL,IV$<07,0@9QMBZK`3H*$S@:,Q_8(I?8)82)&BLPZ9IF"X 218 ML!.-:16=28$R7AMM#)+)5J4WK4WFCRQZ`\520/D&.04T0K:`'!&<9J#^/#", 219 M)CA6FO?8P&YI:_$M]ZT4HE[I3L4PMD9Z#+(_<608G8EMU[<'CBE".:@ME:FE 220 M^#(%$A+!#`$EDL[.!II0:_)&&()+4U1PG"(<AAC$!I80R$G,_"052:Q7N%-E 221 MGV8-<`;?3'%!%A9<R<A\?.S.!)>Z=1*FTE;H+A7]A?IEVT,+E22ATNG0G)O\ 222 MG"X:]@W@'F-<Z1*^9+O`+^!D)/WF%N'$T3CH1,4@]HTTGL=N]/F*J0,BTAX8 223 M!MGG?I270@6B0-!)P3P--"XZ16NS%I:^YD4R72LBUMA+X)>N&$C$[."UU9$$ 224 MDGV#]P\350L38%E#Z\R0@?,("X;<G(IQ%,5X4UQ-U!;[H()2+\XTDW8$S:"/ 225 ME4RH1C9?X3BV0;\M<K<QT'MLN+5)#RKD!]T<@<WDU;MU9.@"6:.<[*`]-`-7 226 MU)*RN3K<TLH'PQC*RUZDE&F>\.[T'.L0D*G6(825QP?2=U^Q6D2[%N>M(4;) 227 ML`)Z*)L;A`VGGP1K3;0M?-O`"&QC5M*]!$DY;0V+5:E68#<BF^1"FM(@Z9"T 228 MM6L@^@"_.0<27O;7JD2LPH2H@@QHO*@VH0[P?3EI#2M2:8E8>/R(B4@P:7A. 229 MC*00*BN0;2!]2U;*NBU(46NE/#9UX=\"*TE]K)I,/'Z@CH0+FBG)=Z?DDYQ( 230 M234=B1-[*-ABK:">=6'Q0^.9DA3S79N9B"2`!_6F.=BF)!_81JB=5&K)-27Q 231 M_S8E"553,6GKFN1PRKI"9M9574D*NJDD"B)G6S/,I54Q4NIE:G)L#4@4&0"* 232 M%M*>P:&\IFM)D1TF5\L8D<S:J"1JIZJ%GKR]IV)@LJ<==%@<,6UZ$@>8L!L7 233 M8THF&+()N)I$*ALYN=1#BV&+.4GCI*(LQD44_*_9U0*\27>=H2OW(I6P:8YZ 234 MD5%_>\@*K*8K6^%DP%G,W8)SVN:<IBM%A3%/7F:5=%:QO=%)G!%BRI)?]CD9 235 MWIN[A>P(E^E*;!QOZ@)D:$<WI%JY@J@M\8&AII310LKMX%0TUY4(44-+[(T9 236 M?^#D"Z31DZ@(78G]F/L!)!))?K>T(&_JBE*S_*20N\F%?I(2O$Q1@KU+;2VO 237 M@.<'B)"R6]VN*<44I*($\$3X2(QHZ:%F/%9EIA:-3]V:1B]XL)*F2*8C5*7L 238 MA7Q'T">Y:17P7_?D\H.N[%?5"O0=!?1PRV3.(U2EH"P[KX"'!>#(=!F%WJLK 239 MR[9T1YW,=%Q8YU`AQ50EUCHW+?AO=!1%%\NN7TU7(G)#XG%CA!$!-YR$>YFF 240 MQ'8!58F2JMBC56YJE`3JREJ9,+FIA62/E3<<]W!-"<N#\T!!JF*DR"Q=6EPU 241 M61/49P1&(0:SWXU1TAYJ4J.H<+=0A2&6B3$:A]U;5`XHS`W;&^:;^Q759*V6 242 M(RI;!5X2L@JC?[F>1#3%R-7<=06HR2]*4?JW1B(YBCRAGQSC1:)\$0/.%"7T 243 M-D*Q2T.I-U"*/*:*-#BI-='36O[,GDCSTP&8-0Z1_.G]IX\__B1H]>M/W_Z8 244 M/BMWM_+T?/WWI^;VF\=<_N,Z?^?`R]]Y*)KK?_Y?^'$Z'*U-/]7R/\K_ST^6 245 MGVSY?#N-'3]2AE)DE^&8J/>?Q9;X$"OAB_S[]C,^37#AYB4WF]PL<A,.@4M_ 246 M>]EOV\M7*:@/_?66N_WEB]P9@!7\Z;8**G_9'O7\%!7TEZ^LF]%K/K"D9,B= 247 MR7,W[$9G%[ZR$_/<;MH%UE`?\XH*4/60`GD7?C(!]R<K_L):!O&;W^W:/U;3 248 M'OZ2T^J94L+S]7EWR-W).G#:4MP:VD$?IXJPDI9TZR.&%<Z->*19']O+-\:A 249 MY'9GY5^L'CCPM)YN+52KI_F[=FN@:ST_%Q^T;@V@\_W1$+YZEQNLGAVM.I9( 250 MF=."8?UL'$L,0K&2;AWMTE'<JW)OL9>50RF5=+L]K9--.ZFU5ZN]:QT_VZ$L 251 M5M*ME^/5[Q:YNZWV^:AV9UG'FXXP/MYG)=-ZWMESO3>LSP,"H/6RUB]6PWA] 252 MMSJK/=G2[Z;U%G)8CC7<$QNKXP"LYQ4DM4N-9_&((/+=I+^/[;+Y!:^6U@RD 253 MK+"SG/"NPS[YZ+(UT_VG7[#ROE\P(Y:2R>1E-XN.+-N?G1(P6.^.)=-<'+]@ 254 M_7/(]<`6E2!;1IQE'+VF=XMV39?+:]6[WK=**5Q>A]PMNGYL5343S&YK".:H 255 MW?;%5EPTNQ44ZS.7D``ZETSO=;-)ODRD?&457>DB*L-*JG5=%Q%*MI44?P$N 256 MH\<ZHNCKJU`<;2F5M+YJ2.2VDFH=MK44<N4KB>OF55_$*EJQ:MCT61>4]R2# 257 MB6[3OS\E"O+XDXHE7#/O@A*^U*]``>7]0_XN7\NWUQ\_<%O^*K15K_)>620E 258 M"'._%_SR*TO?\=.OWRI+[G?!EE_\J?N]RN^^U1^\@8\__NG']]S&G[3]W%!N 259 MY[2BO\T-E:>&M!U_YQ2WZR-VL:6G#-G65*@1()TZ]F]IQ\FSY?=+"&1]C9I\ 260 M@U%5/./>V?<:?KRCH"2QL^^,LFP^;8%LFP'QL\7T6)#T@1ZM8.+U6GC7MQ/= 261 M"2%`=49!W@ME5:XH2'LA]H>X[\NX/8HVZIN);X7]T5L4V)JU-0AB3=(1)J=6 262 MN>\FOA^.UWH*\G:(>%$4I.T0ZX_W?>?P?:][P_7E>=^KUK2K?M_(TCE-Z5.. 263 M-S[E^)<D.$0_JD$YIPY]3(S.XI:;KA&IB*XD0#6T3=&[(50F)[I#N(8+'>,R 264 M1?W"0RM6$JCFJ&>/%GO*R/*BN\IRM`,<GT2KFOJ><"D?P>HA*6W%?C.3E.AV 265 MLU4^DHBI[$V8U3,)6`N9V27)UPB)*5=L/Z;J,/E'MFH("U^_IY6AHM(<UI0C 266 M</@"49(K%SA\E"E)50OI81TMK0F5G94DRD4-H?2TG;B@-398DB!_KY\3RA[? 267 M'T7TG7YNU*CK*_V*@PKUR_S:OB$?5M0PM."0RZ+%'U#37:[A@/C`DTTNU"?Y 268 MWOEHE4?K>F\??++RR=ZDXL)'*QZMJ+KRZ<JGUSLKJW+9J7_W^^#S5-Q45N_] 269 M@Q44U=!U2A.%511642YIH^IF@TK01+.]P'RN^WVR"M0PW\<'G_[6M+!+`[I7 270 MX>DBM=N6-&Q#6/@Y?PU]_C[QN'?WEMKPL#3U0PPF=J/VGL:3FTQ[?QY3:08W 271 MOQO8/]G$V/!J[V-\=84_C[!5G@?9JBYYH*WN>D:;QZ]9IW2XP<MY3Z/-$]R_ 272 M&VRK.XVWU5S.F!/:V9NA'H#QK7N[CCM^4-[3L"M.22./SNFFK^-0?-?_$GV_ 273 M34PQ]B[T"23C4ZZV0:NV0QSJ'9#PXRA,`C<KN&U]JRZLZ?91A8_BM\T*E9L+ 274 MGOJG^^7H/M.IIS#K/TSG\(9VJ&)5<K)1&&GJJ/G0=*\E%3WI.CMJ(R`$:UN/ 275 MTJ]TOV:E]UAEWZFP9-4G[U;K*<SJ[_6V,_8.RCA*4&R4?J?2^J0+X5BMJ;0\ 276 MJ<1[G2)3V;([/JJ/L4$1:VLA?3N5M*Q(X?^]4V%]4J?5J-A/)HN9B:E*VXL0 277 MQO:[/6G]JGMGF2L5MJRAP>_(3_H.T/5URY7*'!G!>&S+2UK:(9J]V,B%OD^H 278 M-=E:2V6.DH;9OZG(K1N<BF>W'?>XO2MFTEBIS/>>SC=[+G,<-?AB,2W9^A&3 279 M]!$%#IG<#AX//[#ZV?P9)HJIR`V@25'TWB<(-MB_5.`&$)ZH9]-,GT:^\6ED 280 M-ZS=W=0H8P'"JBVI261";<(5)B!I77KG"7V6T"%I;6PB,N*^!"_+T1\NVC@. 281 M+/2&"QL_CC=NAX2!-Q'%.LHB)'.,%GJBADC6>1DH=+'!Z06A'_1A65LM`\)R 282 MQ`\9C:X26@A>M2J.&"#(Z."OA@N$IY&5M/IK2!3>+=9^#V'"J4B*"VW6M;>Z 283 MXK72]9@<+E_H):0*7PI+J[R%2(UKQ1IWV2A>LPHLR%&."JE/S=FQPB?AVE0E 284 M;@V'EJY(IRWS%=X*O,("8-X9*Q:K8SQZ<VCI>G/J?A&_=XVY5!,7AY&N_::. 285 M9=QWQ;?.1/LJ:G8[V2OIZ]WW^/Z`FM\R]!NACQKZE:A'MV9%.XIB''H8C)D* 286 M"(H!&8,#"F$4FCB*0W'5S5]QB6[\!DF(-3H-^NI`@BA4$1Z!@F#*;^T'[Z5[ 287 M"Z*CYBUXZNUWG7WJJCL-GGI;GGI[.OM]5^MW72W/76WLJH]]LAOQ]6[',_C( 288 MHC*E1`<L6RG?]"B!:CQI*9DOQQW![[!:AH`6A34)4NFP<UZE:+P<9\5='N-> 289 M.Q<=?\5]F2?[E"8;D\<4+B_K+\>A@<_$EMYRT?%KX"-2U\YEV;6Q^6W#F8J3 290 M4PVJ;D6+MF6B2N9#U9I+CD_D9@K3S(79+8*7[.MZ*D_>$:J':6<?:W'ROR') 291 MP[\BP;U#PPLW/DR3WM*W585^/+%BKYI+LX-%1FCV>N?B[&;!1Z^Z'9-@Q>%M 292 MX2#-V7/++^9[I/9]U!EO:INS]DEVWU*?BK*WAD>!U;OG\NRT@6"V]?Q\\MU@ 293 MH]OMZ6D')J:_Q]BI],5\K]3A)P7!,+RZG66,^W6&X?[.+\1!GOWIP>P>DD$> 294 M[8C,_9V3B%_J6[G4\4VWW6VVI[K#Q<M-0O:=F;OV8JYJ[A0(A\>SUTN.RO![ 295 M)??.A=E%Q61Y.ZS`BK.C2D1YCN?B"-/H9I^FR*-LVS>EU[9'+BP^"[HUS=US 296 MOU!8?7\*.\N<4^'!ETEJ3J/7DAPBPI&>;=ZI-+O7D-@_8H+WRU.L2":H]SLW 297 MZ7YN#>\!D.=FJT^/[IO\QMDI+3X_2W=R,^F.J^U&I[9LZ&8).HXZD2J>6%-' 298 M*LOA*IRI%_*R7IY#5CQ'-!241R0=T"]YT1A!=QMO>Q-^?[SF1ZO/F@:+=DME 299 MQ2=M*VX[12A`=Z@,]_:)QO[BL1%^\WVL5)*#9C<9^"V5YL`9OEG98N`L5AH( 300 M<K_.,S@>,C53XF<]N[.FTN93N10"=3^D]QBBG,NMYG+N4_&IE.>_G:+QDJ-W 301 M4(6>:Z-E.9*'(]373(4YG(=3)CP[]H1NW8J1]><GM1YW^[87P<=:=BIK/H^; 302 M\]AR?ZK/(UY#)E)+L)5&D`F?>_%!Z_IZ`9=Q%.2>5RI="3/S<Z^EEU0\$WC& 303 M9X;:3H4!HW6R>INYM/MD;:K%IU:;SQ1?HSY\J3=]$4?B-[YDG(IV0N,WJ:`C 304 M/[D2*,?7DT-V/$!MV)R?.<KU#IN-S=F(GKIESLE@3V5565FUG@:ROWDXV\KE 305 M.P%\?`TMA-4BW8'RD?&Q^I5*IPWM?C&W\RD:/J[LD0RLE17OD=L(^&A5*G-[ 306 M<.GHU/S<LL'9BGI:*G)W/5L;KCF\+3<P\.W$*-GV:IO*^CSA\016E7+F1O)M 307 MSRO,=)QX4`^@M6WCW`RL>K\J:$XH5G?41Q_T^AM\-13*$R'ZK?</_E0%J-48 308 M;M5MK"YMT0%K#2B'%(*`JH$J;R4H:LE!DSNZKB#U&[_(C(]X)VAJ,%&0#Q)F 309 M$R8-A$C2',UH`Z0.#F5.&Y(L6'!`X7IL>]GZ<KR&.+M[E)I!9@"^R@\3QR/9 310 M9XAWDZ5S'7SI,$_F&4>[J1<EX-U\.+_%<"7;QK&Z<V4P&=!-%/!]/^'(0&W( 311 M.G4O[\_9JR@3-W#@6`!(QVH+Y.%KOICG)C#:>&A^]L&&@5F`^&O+L#``6(4# 312 MZPD3!OBZP6MI,P-"1UZ;9RTD,.B@:^)S0/W%7$6!MO@5Z*!(A6PB*'N<2-D] 313 M"5G!V4,)]06,*J_SSA[M@%#\%D^+9I)C$EN5]?<Z!L1\,7_WB58&:&K.]MEN 314 M5#AH@*V2`5Q`HOI:<2+U06^!AVZ`S960FV,A&++XSOU!;0Z$Z'1;_0`VAT`] 315 M^$`[HY\@3AA4L^["[[6G>\2REQ3(_-HC`;0`-S@=)H,SQS70K_O*+GD'->O1 316 MO*:0R16CNPXF<QS37IUH,L->T&V>%.0$J@*G`)"5GA!5@!1\0+QY27:S;NJ^ 317 M#*0<G7!XMQ/7PC+83P,\#/B;5O,)<9`4\`-NKI8!4D`/GB],Z7)XY+`#R]NI 318 M1Z[8=!-',]DI&&AC/!*\\;9E93G_R/&Y[=LE`YH`$/A\*0Z</FC&X0,':^4H 319 MLX.'^>K>=T?(PUY;QM"#Q`Z/=8^.2+/O1;8_^Z@["'$TL!X90<1>3R]J,)4< 320 MF:YXD>W>0H>ENCEG;IQ#P67:-A4Y#-SLV]FY9PK*S>_/$?O.F8B<OTIOWOK* 321 M*.!HZLS[,K^.;[@QRVTQY2%W&$KEO6(AZJ&N-3YH@>IA@6JI^J/3KS<8<RP7 322 M@\WS:Y>:]]!`\Y"KH@=C6Z"YRQUX^>:P0'.3&XRI>JBYR@T$)<<[ZR]R*9TO 323 M&G:.B&^]-?1LT=Y2/?+LH?1R;8L^PS/9<0B5M-C,,SDT$E_8A%SK*52U=P:H 324 M+?;[$&A^:8C:([_X9L"V,'5$?N<LTG@UIZ:.=$'K3;V:\]6F@B,F-Q;#W>M] 325 MGV`P)'^\KX\3"EY7;=)XC@3?:+JJ,Q24=6FUT1^ZG)>%$Z$B"@P9?-\?$0;& 326 M3YJT0=<P*I#J*_RE\CB\=N\XX_J+-M6KM'Y?>!B_9/'&D]_6#TF<X/W5=WN6 327 M*CIUM>#OI(M!;QN0[Z6,X6\M^RUQ^U.2:1,\;(7O(7CW^D[L4D>>I"]UHCQ) 328 M8>I!S=*86F]'+&7%CDQ%X"PFN42:P-_)96H[BV=JN3R):6JZ)G'%)W%M!)6J 329 M<%&B,T^AE_&>914Y(O??26IJ^%E@4\/%!9=\\,MFI]BBP"C4)+N/TK837TQX 330 M&:1(PDO2U1'?@DK[$5YPPU57J>P.E-<CN@1MJJ<HO^304@,I4>5F(,/%5TN; 331 MR:^KSQ2KG"VG$,S^E(+0_D6Y_#^2S/_3WR<@S/'T].33_^GKQ_DN]I>__?5? 332 MI:(_O/WMXP^_?OWK+Q]VI_[A?_R77[_^X;^]_>WM7S]^_?C;+U')8B7O7]_^ 333 MZU\^_O,??OVK]L6_H_W+:7OGMM=UDA_6_9O)#__H;7XG]>$?/A)-E3__TS]- 334 MH[[:;Z8]K/Z;:0\K)4RL^9GV\)GV\)GVD(R0?R+M8:VT@O9GVL/+9]K#__&T 335 MAWT=&=SW[QHPFC10`"H>MX;[@08LU/]!9/&P0#^R#(9"`B0C\-&/HCD+^I/Z 336 M\4US`@01??U6?["*-6^"]1:K4W_%*BV/@OD-5IWG3'RK#ZO)WZ:D-ZN?"0V? 337 M"0W_9$+#;DEP^F="PV="0\C.OV5"PT[X><_?U;SM?8"`CWR$2;8\G"7]0SGX 338 M3"Q8QG.OZWU\&(&^T,ECIK`2O[:2UC7W8'XH%QZ9#&(4J]VJ^1+5#&;JUOLB 339 M3WV^KP^EN#-18<@3:G%6M%/-RJ7;R*QKW1CV!VGMFHXP/PI-2OBGNCQ$`_6Q 340 MX`HRHUC3$N1G,!P+'"QJ<J*1IM;K#SH<]DXV(BT&1"EK-B*ZS,Z@C#,F2EGS 341 M(6%^@`^)+JXT*BT-BNY?.BK*_O>!84[!&1E=8FEP\MB4,S::,1!#T]/(E#0R 342 MVJX-C>VZ,3QI=%RF$KK<^S-?X#-?X#-?X#-?X.??RQ<0G10ZHUSW9[[`9[[` 343 M__?Y`N4J:4W4W[>0YRW[/W9[Z5XK9;WKWHUSD@IM8407$#X9`E>,40_PH_1[ 344 M?1S[.^%)[5U@%OCT#PMT?"CMWFLKRM&7WXWW^0V^T`[L\!6PA!WY0`OM!^V1 345 MP27MD0`+ZXW!)>N-92]XCUY/;PB6M#?1$]9BO5!T@FXH,F$_7J,//H`M#6;_ 346 M)/U_DOY?/DG_GZ3_7/A)^H_23]+_)^G_D_3_2?K_)/W__/\<Z;]<(T'A^4GZ 347 M_R3]?Y+^/TG_GZ3_3]+_)^D_0,C_C:3_<JVT<^_?]0BJXP[ARH&0YU1>M#+X 348 M&:\<WUZ+AF\1I=U#(Y6=-!E0_S5:.>"9(Q]^>YBVWAJM;+A8'L'M=!9J'D$U 349 M+C>Y[0A7,B9)$CT#EHA(@JBO\4H&)>>P:&6''X^]U)#E^-:,T7XK)5@)\HA? 350 M,DZI1'P-85:&=[=%,1OBN\W"F!T_Y9!\=&.,*]/=8IJDR-_7A\8T2;EGO).< 351 M967V:\03;.E=+.@)8K9F#R@/W-CR]\>7;U-)]AM>RF_8?,"Q5\JS9@5TJ0$4 352 M:XU[=V5S:Y^N#U"AI0,5E.8F+3>2H]T9BXE8&HL>W`UL>AG`U:DE']TG]UYY 353 M<O/,DCIN,_O*@?6IQ3A+7_+DGIDU[K=/[2L9YS&UY+JGR:WUS.UK/_/Z2JZW 354 MS:N1QV->25F/:<6W!>\SKPCS]#2S9U*5X&VS2NZX3ZI2T6-2R8!/<RK[_4JS 355 M6L^D*F/69O65_'.;U5>ZK'U>'Q3WF-9Z9M4ZQ6E5OKI.+>DY,;LQL;;`[^O/ 356 <I&#_\NO;K__]EQ_O/_Z'?_?#_P3'2XZ&ZM`````` 356 357 ` 357 358 end -
Tst/Long/gcdp_l.stat
ra1da6f r65148c4 1 1 >> tst_memory_0 :: 13 54909874:3150:3-1-5:ix86-Linux:mamawutz:3406162 1 >> tst_memory_1 :: 13 54909874:3150:3-1-5:ix86-Linux:mamawutz:23696003 1 >> tst_memory_2 :: 13 54909874:3150:3-1-5:ix86-Linux:mamawutz:24023844 1 >> tst_timer_1 :: 13 54909874:3150:3-1-5:ix86-Linux:mamawutz:1101 1 >> tst_memory_0 :: 1360590534:3160:3-1-6:ix86-Linux:mamawutz:307644 2 1 >> tst_memory_1 :: 1360590534:3160:3-1-6:ix86-Linux:mamawutz:2345020 3 1 >> tst_memory_2 :: 1360590534:3160:3-1-6:ix86-Linux:mamawutz:2385992 4 1 >> tst_timer_1 :: 1360590534:3160:3-1-6:ix86-Linux:mamawutz:124 -
Tst/Short/gcdp_s.res.gz.uu
ra1da6f r65148c4 1 1 begin 644 gcdp_s.res.gz 2 M'XL(" *8PPE```V=C9'!?<RYR97,`W5I;;QLW%G[WKR""!2J--#+OEP86T$6!3 M 18'=18%V7]-,I)$UL"P9TCA1N^A_[^%E2(Y&<A0G#XN%$8E#'AZ>&S]^0^674 M7W_\Z =\((3)'M[<WOX0G.H,G=+]8/OUVF+6'%I7HL-[M6]36A_:`5KN]'42+5 M :K-XWE1ML]L>T.-NB9YF406;Y0JY4_C#9H.>M\W':M]4;8VVNVW9[IN/3;5!6 M ];%Z?-K4![38/=9HM=\]VA7^`\(_SU;U,2H23I%?WXW^L'E:5U8D+2U[2RLW7 M X]=UW:V!FBUR)GRPZ[VOOINB]PO[4</';#8#MSH3WC]OVZ;=U$LZDK=/MV3\8 M 752KG5I0=6B7_WK>M&#*/Q;+6;--=IC<#H*]'3OTX^[[V$EZ(C[L._3H](4H9 M #0+]J6G7Z*G:@Y5MO3_$V;V($XAX;$/0_OG3W]$;R.1LTWQX\S:.R#F"SM^:10 M ;=..QF]O[#>:S[O,;^M/LT-;M5%<S9-2W5O.^0IELGK>+IR9,0P4YX*4)+LH11 M [8TX^]&A@1PUJ]\AF*,Q*'S:-]O6!:$"UVNH(/C>[O:/U:;YHU[:D;04[RD$12 MM Y_VNT6N$HW0TV[S.UI-_?<]&D=Q*)O_Q@>H&N1%EG>PQ,C.`.$8.6JLP#(^13 M ,V*?NY5&:#E%)!-GX-R?\8&G,#*1F\QD"",X?8_VY(Y1C-GT.%VFG<54;X9.14 M \61@D\OF/<2G'J$W0RUOWUBC8(DD]_V9Q:+=',]?'";)$P[9]+&]*XT0O#B^15 M XR6AV@AHL9)@3!FT:"DI@4;2P>8A%ZDK"Q#W._Y@8>$4+*(,A,TF"4\1!O=P16 M [%?SKI\1RF#(?L51[4<Y$\Q/M*TX:N:]6HRZHW:!!Q)A%0)_G1#I"Z7%<B&:17 M _!50*2=:5R!M(WKD$Q?/(YNX:![IQ,;R>'/D)3VRTD`'CU`I>'_EE5_V%8I$18 M 9IWL6T>MQ]["W!\U6)J<"8W.])J494CLX6*J):#)%Q:8A!3<QRFL9(P3*S<Y19 M E:,#J^_!XB,M(1;^LY-DR7+)G4&$4&GMD!!9(JU^`;%ET@0K?1^;:"/MVFE120 M 88TC6#I)#5Y(9;U0$Z]-6TVV5]OYD#>0=/Y.5%^//&\\6"$QQI!8R*MOT@N]21 M G:8,Y*5VSBE#K!VF))QCZ>Q45$AG)L6&6DM+2DPPE@H6W.:2.;=+103NVVM<22 M 4@C7S+I+0`03*TOHA`B(EVT2<%Q+FS6"(:Z&,V>%T<H.:QM@EU,%>IAR\9(223 M \Q`R9GR),!J,,(QK5R#>YFB+PN=C=Q,3KC*<4[U32[$>8M.[D8?):NR1$CTV24 M 6XMN=Q4D3RO&BPIR5T'U$:*)*JH)B<BN>L>7$@G9E3R+[(/5+J/[0#2J5O//25 M BL!&_;P;2=RD8&G\ND-!D\&AH#.0U#[JJV9_:*<>-78KU`+'VY,!9&@^0-0326 M )-?B"B37\@HDU]GFT?HBDA<=`A<=!!?'#H\<"!<6A6T?B$9]YB*@OTJ?P<E627 M 0Z[!=3-$R#.X;C)T-/Q*7#?BBW'=R.MPW0Q/HP[7BV/WU<EF9Y(Q7X/L8/8W28 M 07:"R8O(7F0@7F38?MK?:4N[")QPR=GN/DW3^U>S_;C;?+2`8+=3M;FO/^RK29 M 9A'?F.)D=^Z-*"%<63`(<4E/@!.$4WB@[H$J":A=^;:![&8M/X&-D\_N5!Q)30 M (CMM$'W!9-`F)P+6=<I"OVLHX7')F<*5#M(B3/5-@[5P+<`Z%DV%%$=Y2(7"31 M @G:V2J5P:$$E=K9.*)R$G7>PYXR79Q/)M#QQYOS1/(*S3<B*C0M(V:ATH:M832 M :8-6P3YEC%80-,+'=G./;,O),IOA4<4<"E>TU)#?RJ.PDX1G8J6ZQ566;^U333 M 1F%G><,)F0AMNAC#(:MD',*PNB(ZC!F++RR,F0EE*GAL)L*3@PFEF,H@#F<S34 M '/Y=1.%):IL;UZ9<*>U;FDL<9BA;+CA,`%JA<<B9@LG$2X"31J:"8%3Q6!%`35 M -72H"$:(._KMCJ589M7)N(E%P;!1)E2%EL1U9DES_&2D76*[Z``DJ10>(X6)36 M T:%:*AK#PX5@(3I@@O;Q$:`LA@>J+P6',XU#<`!/'(&Q+1SW$KAN-&4Q.E)337 M 'H(#A2)\Q`Q3*3@4Z!B.P;$@;4)T*)7<<:7D+#E/@$:00LYLJ4%Y04T"?LD*38 M ?%.V)A74K*)0L-9.&"TYA8HMM=081J6M:(@PU"SL50S#A@I3E<96^XV=;(&)39 M 5%X4L!+:U(UU)B7&14C.N`CI,R[6L99VW'M/)H3W9B4V1<AY-G6JZ04V-1"-40 M JB.;NBRB,\],I$>C:\Z^E#**3PD25$Y2[*]6/D.0T.BP:>[7+6AYW"V;55,O41 M QU'!\#6T3YH(Y6=)4]'VV`"\#'R>-L$)FYFNAK3IUBKUR,;=\68ASD*?XSD742 M *0X$\IM2)G@%278R?(8RW;:GI`D(TA6D";`LT\RN(TV$\2\E382)JT@381?>43 M )\^0)L*R,X;Y>]%/-;K?H=W67U9VU15)!-I6CYD;Y^^MX@ZJIHMI/9Z"#>OI44 M P_C*G3F<U"UG[[0>FLT&A%,?&>S;%Q1DN>*LV\$_PV<2X=WV['>+;":@D)MT45 M Y[&P6`!8K^#?`V0M]!1UL8)G-EG`""O6Q4-9.YFUE4IHX"ZZO*X%R-E9:\@046 M S+<ZBW5/]G1/V'E3/QVD5O#726;5+G"T=O&..QM%8==:65M@CUCK:V]7>')V47 M OJ/>#F]%\9#LL#=CP>;2*[)3O1KK,DU*P&W:*>D[+D[?2/K.9!M,L,P9'ITI48 M M0\]#Z&6D]@1(OZ.=UW,A?/!4I78$;,A)ET6P168[;RUS##F-N3"+E)FO7X=49 M )\TSQT2,3B>K0GQA=PMC-/3(%%>(LX(>T5D$.A]*[1T+-<!B;GA<%7P+CK$@50 M 89EM]-6KXC;^(<,^XZ$"B$R..04V"*[J6)@J>AD_Q923REL'5K`8%P\G3YV&51 M #&E$_@,$$:;'"GBXK1ZUT^,X9P4R_S4"B.7ICT,'_\//GJ-J7\.!N3N$GX+V52 M [,(/+T3ZLW:QKK;W@''MSML0?V)*:[/>VND7&B+%600\]>(%W!N(1M5R_EF153 M +*KVQN]UC,3>Z)TP$I5N&(@B7\E([+W;RXQ$L<N,I+UIHQB_@I&H#*F5_#9754 M \D0-;R)>=25/5,8AE3G#0XHA#]%#DG^&A^B,1&IZ)0^QUW%?R$,TOXZ'G%[-55 M M<7%:WFB,Q:IU9?S$'MA]](N=(Q@>@T+N3@E+F4Z#L)CG\&#G7IINLFR9.A956 M !F+8609B>#93?#L&XB[CKF0@@PNYBPPDNXXC[CKN6S(0ZF[HOI*!T,'U7-^957 M DB]N%E$V$4=J+]_^MSD(O-?_WW$0BL6+Z5H`[?"L@S[T'[KYX7],V/\6\7P858 /D?';O]W\!2VBLVQ$(P``2 M'XL("++V&%$``V=C9'!?<RYR97,`W5I;C^.V%7Z?7R$L"L26+0_OERQF@!0! 3 MB@!M$2#IZV857\;">.R!K=EU4O2_]QR2(BG+GO5>'HIBL#9%'AZ>&S]^HO>7 4 M7W_\Z9]%4=#[XO;VYI?PQ&;P5#S,%\^_'6;MH2VJXK#>[=NB71[:0[':[7&P 5 MF->;^<NF;IO=]E`\[1;%\RRJX+-<H7`*?]ALBI=M\Z'>-W6[++:[;=7NFP]- 6 MO2F6Q_KI>;,\%//=T[)8[7=/N,*_0/CGV6IYC(JD4^37=Z,_;)[7-8JDI55O 7 M:>UF_+I>=FL4S;9P)OR.Z[VOOYL6[^?XL82/V6P&;G4FO'_9MDV[62[82-T^ 8 MW]+Q=U&M<6I!U:%=_.-ETX(I?YLO9LTVV6%S.RCQ=NR*'W??QT[:$_%AWQ5/ 9 M3E^(TB#0'YMV73S7>["R7>X/<78OXA0B'ML0M+__]-?B#61RMFE^?_,VCJC[ 10 M`CI_:[9-.QJ_O<'OXOZ^R_QV^7%V:.LVBNO[I-3TEG.^0IFL7K9S9V8,`R.Y 11 M(*/)+L9Z(\[^XM!`CIK5'Q#,T1@4/N^;;>N"4(/K2Z@@^-[N]D_UIOESN<"1 12 MM)3H*02WG_>[>:ZR&!7/N\T?Q6KJOQ^*<12'LOEW?("J*;S(X@Z6&.$,$(Z1 13 M8Q8%%O&94WSN5AH5BVE!,W$.SOTG/H@41BYSD[D*802G'XH]O>.,$#X]3A=I 14 M9W'=FV%2/#G8Y++Y`/%9CHHW0RUOWZ!1L$22^_[,8M%N0>Y?':;)$P'9]+&] 15 MJZR4HCR^$Q5EQDIH\8H2PCBT6*48A4;2P>]#+E)7%B#A=_P!8>$4+*(,A`V3 16 M1*8%`?=([-?W73^GC,,0?L51XT<%E]Q/Q%8<M?>]6HRZHW9)!A)A%0I_G1#M 17 M"Z7%<B&6_)50*2=:5R"-$3V*B8OGD4]<-(]L@K$\WAQ%Q8Z\LM`A(E1*T5]Y 18 MY9?]`D4RLT[UK6/HL;<P]T</EJ9G0F,RO39E&1)[N)AJ!6CRF06F(`4/<0JO 19 M.!<4Y2:G<FQ@]0-8?&05Q,)_=I(\6:Z$,XA2IM`.!9&E"O5+B"U7-ECI^_C$ 20 M6(5KIT4E&D>)<I(&O%`:O=`3K\V@)NPU.!_R!I+.WXGNZU'GC0<K%"$$$@MY 21 M]4UVH;?3E(&\,LXY;2G:82LJ!%'.3LVD<F8R8AE:6C%J@[%,\N"V4-RY76DJ 22 M2=]>ZY)"A>'H+@410E&6L@F5$"]L4G#<*,P:)1!7*[BSPAJ-PP8#['*J00_7 23 M+EY*$1%"QJTO$<Z"$98+XPK$VQQMT>1\[&YBPG6&<[IW:FG>0VQV-_(P68\] 24 M4A9/S1;1[:Z&Y!G-15E#[FJH/DH-U64]H1'9=>_XTC(ANU9GD7VPVF5T'XA& 25 MU?K^DR*P43_M1A*W*5B&?-FA8.C@4#`92!H?]56S/[13CQJ[5=$"Q]O3`608 26 M,4#4$R0W\@HD-^H*)#?9YC'F(I*7'0*7'027QPZ/'`B7B,+8!Z)1G[T(Z%^D 27 MSY)DJZ77X+H=(N097+<9.EIQ):Y;^=FX;M5UN&Z'IU&'Z^6Q^^IDLS/)VJ]! 28 M=C#[FR`[)?159"\S$"\S;#_M[[2E701.N.1L=Q^GZ?VKV7[8;3X@(.!VJC</ 29 MR]_W=3./;TQQLCOW1HQ2H1$,0ES2$^`$%0P>F'M@6@%JU[YM(;M9RT_@X^2S 30 M.Q5'BJI.&T1?<A6TJ8F$=9VRT.\:6GI<<J8(;8*T#%-]TQ(C70NPCD=3(<51 31 M'E*AB62=K4IK$EI0B9VM$P8G8><=[#GKY?E$<:-.G#E_-(_@;).JYN,24C:J 32 M7.AJ7F'0:MBGG+,:@D;%&#?W"%M.EF.&1S5W*%RSRD!^:X_"3A*>*4IUB^LL 33 MW\:GC,'.\H93.I'&=C&&0U:K.$1@=4U-&+.(+SR,V0GC.GAL)]*3@PECA*D@ 34 M#F<S'/Y=1.%)&<R-:S.AM?$M(Q0),S26"PD3@%88$G*F83+U$N"D5:D@.-,B 35 M5@10#1,J@E/JCG[<L8RHK#JYL+$H.+':AJHPBKK.+&F.GXR,2VP7'8`DG<)C 36 ME;0Q.LPHS6)XA)0\1`=,,#X^$I3%\$#UI>`(;D@(#N")(S#8(G$O@>O6,!ZC 37 MHPP3(3A0*-)'S'*=@L.`CI$8'`1I&Z+#F!*.*R5GZ7D"-((4"HZE!N4%-0GX 38 MI6KP36--:JA9S:!@T4X8K02#BJV,,@1&%58T1!AJ%O8J@6'+I*TKB]5^@Y,1 39 MF&CM10$KH<W<6&=28ER4YHR+TC[CXAUK:<>]]V1*16]68E.4GF=3IYI>85,# 40 MT:@ZLJG+(B;SS$9Z-+KF[$LI8^24($'E),7^:N43!*D8'3;-P[H%+4^[1;-J 41 MEHMQ5#!\#>V3)LK$6=)4MCTV`"\#GZ9-<,)FINLA;;I%I1[9A#O>$.(0^AS/ 42 MN4AQ()#?E#+!*TBRDY,SE.FV/25-0)"N($V`99EF?AUIHEQ\+FFB7%Y%FBB_ 43 M\#YYAC11GITQW-^+?EP6#[MBM_67E5UU11)1;.NGS(WS]U9Q!]73^70YGH(- 44 MZ^GC^,J=.9S4+8=W6H_-9@/"J8\.]NTK"K)<"=[MX)_A,XF(;GOVNV4V$U#( 45 M3;KS6%C.`:Q7\.\1LA9ZRF6Y@F<^F<,(+]?E8[5T,FN42FC@+KJ\KCG(X:PU 46 M9`CFH\YRW9,]W1,X;^JG@]0*_CK)K-HEB=;.WPEGHRQQK17:`GL$K5]ZN\*3 47 ML_,=\W9X*\K'9`?>C`6;*Z\(IWHUZ#)+2L!MUBGI.RY/WTCZSF0;3/+,&1&= 48 MJ8P/O0BA5I/8$2+^3G1=W(7S$:E*[(C9D),NB^`*S';>(C.,N0VYP$6JK->O 49 MXZ1%YIB,T>ED=8@O[&YIK8$>E>(*<=;0(SN+0.=C9;QCH09XS(V(JX)OP3$> 50 M))#91E^]*H'Q#QGV&0\50%5RS"G`(+BJXV&J[&7\%%/ZR8(<K]:3T7Q</MY@ 51 MP_GMGKKY&<[(_.<'*FV/$XAP5SUJI\=QS@E4_EL$T,K3GX8._F>?O2CJ_1*. 52 MR]TA_!"TYQ=^=J'*G[3S=;U]`(1K=]Z&^`-36IOWUDZ_SU`ES^+?J1>OH-Y` 53 M-*I6]Y\4R:**]WU?QD?P/N^$C^ATOT`U_4H^@K=NK_,1S2_SD?:FC6+B"CZB 54 M,YS6ZMM<R%,]O(?XH@MYJC,&J>T9%E(.68@94OPS+,1D%-*P*UD(7L9])@LQ 55 MXCH6<GHQUY87+^6IR3BDT9_/0O"Z[K5=Z/C`]!H.<G%*7,IV#$3$/DL&._72 56 M=)MER;*S_,/RL_S#BFRF_';\PUW%7<D_!M=Q%_E'=AE'W67<M^0?S-W/?27_ 57 M8(/+N;XS<_CK)!-I9'CQ]K_-/^"=_O^.?S`B7^<?[@9VOEJ[AIVSQQMX\`'$ 58 ;ATY+^#\3^!\C7@XC.G[[EYO_`NRSL1)&(P`` 59 59 ` 60 60 end -
Tst/Short/gcdp_s.stat
ra1da6f r65148c4 1 1 >> tst_memory_0 :: 13 54903718:3150:3-1-5:ix86-Linux:mamawutz:3169202 1 >> tst_memory_1 :: 13 54903718:3150:3-1-5:ix86-Linux:mamawutz:23696003 1 >> tst_memory_2 :: 13 54903718:3150:3-1-5:ix86-Linux:mamawutz:24023844 1 >> tst_timer_1 :: 13 54903718:3150:3-1-5:ix86-Linux:mamawutz:61 1 >> tst_memory_0 :: 1360590513:3160:3-1-6:ix86-Linux:mamawutz:283948 2 1 >> tst_memory_1 :: 1360590513:3160:3-1-6:ix86-Linux:mamawutz:2345020 3 1 >> tst_memory_2 :: 1360590513:3160:3-1-6:ix86-Linux:mamawutz:2385992 4 1 >> tst_timer_1 :: 1360590513:3160:3-1-6:ix86-Linux:mamawutz:6 -
factory/cf_gcd.cc
ra1da6f r65148c4 607 607 gcd_poly_p( const CanonicalForm & f, const CanonicalForm & g ) 608 608 { 609 if (f.inCoeffDomain() || g.inCoeffDomain()) //zero case should be caught by gcd 610 return 1; 609 611 CanonicalForm pi, pi1; 610 612 CanonicalForm C, Ci, Ci1, Hi, bi, pi2; 611 bool bpure ;613 bool bpure, ezgcdon= isOn (SW_USE_EZGCD_P); 612 614 int delta = degree( f ) - degree( g ); 613 615 … … 620 622 pi = g; pi1 = f; delta = -delta; 621 623 } 622 Ci = content( pi ); Ci1 = content( pi1 ); 623 pi1 = pi1 / Ci1; pi = pi / Ci; 624 if (pi.isUnivariate()) 625 Ci= 1; 626 else 627 { 628 if (!ezgcdon) 629 On (SW_USE_EZGCD_P); 630 Ci = content( pi ); 631 if (!ezgcdon) 632 Off (SW_USE_EZGCD_P); 633 pi = pi / Ci; 634 } 635 if (pi1.isUnivariate()) 636 Ci1= 1; 637 else 638 { 639 if (!ezgcdon) 640 On (SW_USE_EZGCD_P); 641 Ci1 = content( pi1 ); 642 if (!ezgcdon) 643 Off (SW_USE_EZGCD_P); 644 pi1 = pi1 / Ci1; 645 } 624 646 C = gcd( Ci, Ci1 ); 625 647 int d= 0; … … 683 705 pi = pi1; pi1 = pi2; 684 706 maxNumVars= tmax (getNumVars (pi), getNumVars (pi1)); 685 if (! (pi1.isUnivariate()) && (size (pi1)/maxNumVars > 500))707 if (!pi1.isUnivariate() && (size (pi1)/maxNumVars > 500)) 686 708 { 687 709 On (SW_USE_FF_MOD_GCD); … … 701 723 if (!(pi.isUnivariate() && pi1.isUnivariate())) 702 724 { 703 if (size (Hi)*size (pi)/(maxNumVars*3) > 500) //maybe this needs more tuning725 if (size (Hi)*size (pi)/(maxNumVars*3) > 1500) //maybe this needs more tuning 704 726 { 705 727 On (SW_USE_FF_MOD_GCD); … … 717 739 return C; 718 740 } 719 pi /= content( pi ); 741 if (!pi.isUnivariate()) 742 { 743 if (!ezgcdon) 744 On (SW_USE_EZGCD_P); 745 Ci= gcd (LC (oldPi,v), LC (oldPi1,v)); 746 pi /= LC (pi,v)/Ci; 747 Ci= content (pi); 748 pi /= Ci; 749 if (!ezgcdon) 750 Off (SW_USE_EZGCD_P); 751 } 720 752 if ( bpure ) 721 753 pi /= pi.lc(); -
factory/cf_gcd_smallp.cc
ra1da6f r65148c4 33 33 #include "cfNewtonPolygon.h" 34 34 #include "cf_algorithm.h" 35 #include "cf_primes.h" 35 36 36 37 // iinline helper functions: … … 820 821 cH= uni_content (H); 821 822 ppH= H/cH; 823 ppH /= Lc (ppH); 822 824 CanonicalForm lcppH= gcdlcAlcB/cH; 823 CanonicalForm ccoF= lcA/lcppH; 824 ccoF /= Lc (ccoF); 825 CanonicalForm ccoG= lcB/lcppH; 826 ccoG /= Lc (ccoG); 825 CanonicalForm ccoF= lcppH/Lc (lcppH); 826 CanonicalForm ccoG= lcppH/Lc (lcppH); 827 827 ppCoF= coF/ccoF; 828 828 ppCoG= coG/ccoG; … … 836 836 CFList u, v; 837 837 DEBOUTLN (cerr, "ppH before mapDown= " << ppH); 838 ppH /= Lc(ppH);839 838 ppH= mapDown (ppH, prim_elem, im_prim_elem, alpha, u, v); 840 839 ppCoF= mapDown (ppCoF, prim_elem, im_prim_elem, alpha, u, v); 841 ppCo F= mapDown (ppCoG, prim_elem, im_prim_elem, alpha, u, v);840 ppCoG= mapDown (ppCoG, prim_elem, im_prim_elem, alpha, u, v); 842 841 DEBOUTLN (cerr, "ppH after mapDown= " << ppH); 843 842 if (compressConvexDense) … … 1214 1213 { 1215 1214 if (inextension) 1215 { 1216 ppA= GFMapDown (ppA, k); 1217 ppB= GFMapDown (ppB, k); 1216 1218 setCharacteristic (p, k, gf_name_buf); 1219 } 1217 1220 coF= N (ppA*(cA/gcdcAcB)); 1218 1221 coG= N (ppB*(cB/gcdcAcB)); … … 1267 1270 cH= uni_content (H); 1268 1271 ppH= H/cH; 1272 ppH /= Lc (ppH); 1269 1273 CanonicalForm lcppH= gcdlcAlcB/cH; 1270 CanonicalForm ccoF= lcA/lcppH; 1271 ccoF /= Lc (ccoF); 1272 CanonicalForm ccoG= lcB/lcppH; 1273 ccoG /= Lc (ccoG); 1274 CanonicalForm ccoF= lcppH/Lc (lcppH); 1275 CanonicalForm ccoG= lcppH/Lc (lcppH); 1274 1276 ppCoF= coF/ccoF; 1275 1277 ppCoG= coG/ccoG; … … 1624 1626 G_random_element= 1625 1627 GCD_Fp_extension (ppA (random_element, x), ppB (random_element, x), 1626 coF_random_element, coG_random_element, alpha,1628 coF_random_element, coG_random_element, V_buf, 1627 1629 list, topLevel); 1628 1630 TIMING_END_AND_PRINT (gcd_recursion, … … 3905 3907 l.append (random_element); 3906 3908 3907 if ((getCharacteristic() > 3 && size (skeleton) < 100))3909 if ((getCharacteristic() > 3 && size (skeleton) < 200)) 3908 3910 { 3909 3911 CFArray Monoms; … … 4120 4122 } while (1); //end of second do 4121 4123 } 4124 else 4125 return N(gcdcAcB*GCD_small_p (ppA, ppB)); 4122 4126 } while (1); //end of first do 4123 4127 } … … 4381 4385 4382 4386 CFList evaluation; 4387 long termEstimate= size (U); 4383 4388 for (int i= A.min(); i <= A.max(); i++) 4389 { 4390 if (!A[i].isZero() && (getCharacteristic() > degree (U,i))) //TODO find a good estimate for getCharacteristic() <= degree (U,i) 4391 { 4392 termEstimate *= degree (U,i)*2; 4393 termEstimate /= 3; 4394 } 4384 4395 evaluation.append (A [i]); 4396 } 4397 if (termEstimate/getNumVars(U) > 500) 4398 return -1; 4385 4399 CFList UEval; 4386 4400 CanonicalForm shiftedU= myShift2Zero (U, UEval, evaluation); … … 4548 4562 if( F.mvar() == G.mvar() ) 4549 4563 d *= gcd( F, G ); 4564 else 4565 return N (d); 4550 4566 return N (d); 4567 } 4568 if ( F.isUnivariate()) 4569 { 4570 g= content (G,G.mvar()); 4571 return N(d*gcd(F,g)); 4572 } 4573 if ( G.isUnivariate()) 4574 { 4575 f= content (F,F.mvar()); 4576 return N(d*gcd(G,f)); 4551 4577 } 4552 4578 … … 4934 4960 } 4935 4961 else 4936 return N (d*GCD_small_p (F,G)); 4962 { 4963 if (p >= cf_getBigPrime(0)) 4964 return N (d*sparseGCDFp (F,G)); 4965 else 4966 return N (d*GCD_small_p (F,G)); 4967 } 4937 4968 } 4938 4969 -
factory/facFactorize.cc
ra1da6f r65148c4 413 413 414 414 if (w.level() != 1) 415 { 416 A= swapvar (A, y, w); 417 int i= A.level(); 418 CanonicalForm evalPoint; 419 for (CFListIterator iter= evaluation; iter.hasItem(); iter++, i--) 420 { 421 if (i == w.level()) 422 { 423 evalPoint= iter.getItem(); 424 iter.getItem()= evaluation.getLast(); 425 evaluation.removeLast(); 426 evaluation.append (evalPoint); 427 break; 428 } 429 } 430 for (i= 0; i < lengthAeval2; i++) 431 { 432 if (oldAeval[i].isEmpty()) 433 continue; 434 if (oldAeval[i].getFirst().level() == w.level()) 435 { 436 CFArray tmp= copy (oldAeval[i]); 437 oldAeval[i]= biFactors; 438 for (CFListIterator iter= oldAeval[i]; iter.hasItem(); iter++) 439 iter.getItem()= swapvar (iter.getItem(), w, y); 440 for (int ii= 0; ii < tmp.size(); ii++) 441 tmp[ii]= swapvar (tmp[ii], w, y); 442 CFArray tmp2= CFArray (tmp.size()); 443 CanonicalForm buf; 444 for (int ii= 0; ii < tmp.size(); ii++) 445 { 446 buf= tmp[ii] (evaluation.getLast(),y); 447 buf /= Lc (buf); 448 tmp2[findItem (uniFactors, buf)-1]=tmp[ii]; 449 } 450 biFactors= CFList(); 451 for (int j= 0; j < tmp2.size(); j++) 452 biFactors.append (tmp2[j]); 453 } 454 } 455 } 456 457 CFListIterator iter; 415 changeSecondVariable (A, biFactors, evaluation, oldAeval, lengthAeval2, 416 uniFactors, w); 417 458 418 CanonicalForm oldA= A; 459 419 CFList oldBiFactors= biFactors; 460 if (!leadingCoeffs.getFirst().inCoeffDomain())461 {462 CanonicalForm tmp= power (leadingCoeffs.getFirst(), biFactors.length() - 1);463 A *= tmp;464 tmp= leadingCoeffs.getFirst();465 iter= evaluation;466 for (int i= A.level(); i > 2; i--, iter++)467 tmp= tmp (iter.getItem(), i);468 if (!tmp.inCoeffDomain())469 {470 for (CFListIterator i= biFactors; i.hasItem(); i++)471 {472 i.getItem() *= tmp/LC (i.getItem(), 1);473 i.getItem() /= Lc (i.getItem());474 }475 }476 }477 420 478 421 CanonicalForm LCmultiplier= leadingCoeffs.getFirst(); … … 480 423 leadingCoeffs.removeFirst(); 481 424 425 if (!LCmultiplierIsConst) 426 distributeLCmultiplier (A, leadingCoeffs, biFactors, evaluation, LCmultiplier); 427 482 428 //prepare leading coefficients 483 429 CFList* leadingCoeffs2= new CFList [lengthAeval2]; 484 prepareLeadingCoeffs (leadingCoeffs2, A.level(), leadingCoeffs, biFactors, 485 evaluation); 486 487 488 Aeval= evaluateAtEval (A, evaluation, 2); 489 490 CanonicalForm hh= 1/Lc (Aeval.getFirst()); 491 492 for (iter= Aeval; iter.hasItem(); iter++) 493 iter.getItem() *= hh; 494 495 A *= hh; 496 497 CFListIterator iter2; 430 prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(), leadingCoeffs, 431 biFactors, evaluation); 432 433 CFListIterator iter; 498 434 CFList bufLeadingCoeffs2= leadingCoeffs2[lengthAeval2-1]; 499 435 bufBiFactors= biFactors; 500 436 bufA= A; 501 CanonicalForm bufLCmultiplier= LCmultiplier; 502 CanonicalForm testVars; 437 CanonicalForm testVars, bufLCmultiplier= LCmultiplier; 503 438 if (!LCmultiplierIsConst) 504 439 { … … 571 506 LCheuristic= true; 572 507 factors= oldFactors; 573 CanonicalForm cont;574 508 CFList contents, LCs; 575 int index=1;576 509 bool foundTrueMultiplier= false; 577 for (iter= factors; iter.hasItem(); iter++, index++) 578 { 579 cont= content (iter.getItem(), 1); 580 cont= gcd (cont , LCmultiplier); 581 contents.append (cont); 582 if (cont.inCoeffDomain()) // trivial content->LCmultiplier needs to go there 583 { 584 foundTrueMultiplier= true; 585 int index2= 1; 586 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); iter2++, 587 index2++) 588 { 589 if (index2 == index) 590 continue; 591 iter2.getItem() /= LCmultiplier; 592 } 510 LCHeuristic2 (LCmultiplier, factors, leadingCoeffs2[lengthAeval2-1], 511 contents, LCs, foundTrueMultiplier); 512 if (foundTrueMultiplier) 513 { 593 514 A= oldA; 594 515 leadingCoeffs= leadingCoeffs2[lengthAeval2-1]; 595 516 for (int i= lengthAeval2-1; i > -1; i--) 596 517 leadingCoeffs2[i]= CFList(); 597 prepareLeadingCoeffs (leadingCoeffs2, A.level(), leadingCoeffs, 598 biFactors, evaluation ); 599 Aeval= evaluateAtEval (A, evaluation, 2); 600 601 hh= 1/Lc (Aeval.getFirst()); 602 603 for (iter2= Aeval; iter2.hasItem(); iter2++) 604 iter2.getItem() *= hh; 605 606 A *= hh; 607 break; 608 } 609 else 610 LCs.append (LC (iter.getItem()/cont, 1)); 611 } 612 if (!foundTrueMultiplier) 613 { 614 index= 1; 615 iter2= factors; 518 prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(), 519 leadingCoeffs, biFactors, evaluation); 520 } 521 else 522 { 616 523 bool foundMultiplier= false; 617 for (iter= contents; iter.hasItem(); iter++, iter2++, index++) 618 { 619 if (fdivides (iter.getItem(), LCmultiplier)) 620 { 621 if ((LCmultiplier/iter.getItem()).inCoeffDomain() && 622 !isOnlyLeadingCoeff(iter2.getItem())) //content divides LCmultiplier completely and factor consists of more terms than just the leading coeff 623 { 624 Variable xx= Variable (2); 625 CanonicalForm vars; 626 vars= power (xx, degree (LC (getItem(oldBiFactors, index),1), 627 xx)); 628 for (int i= 0; i < lengthAeval2; i++) 629 { 630 if (oldAeval[i].isEmpty()) 631 continue; 632 xx= oldAeval[i].getFirst().mvar(); 633 vars *= power (xx, degree (LC (getItem(oldAeval[i], index),1), 634 xx)); 635 } 636 if (vars.level() <= 2) 637 { 638 int index2= 1; 639 for (CFListIterator iter3= leadingCoeffs2[lengthAeval2-1]; 640 iter3.hasItem(); iter3++, index2++) 641 { 642 if (index2 == index) 643 { 644 iter3.getItem() /= LCmultiplier; 645 break; 646 } 647 } 648 A /= LCmultiplier; 649 foundMultiplier= true; 650 iter.getItem()= 1; 651 } 652 } 653 } 654 } 524 LCHeuristic3 (LCmultiplier, factors, oldBiFactors, contents, oldAeval, 525 A, leadingCoeffs2, lengthAeval2, foundMultiplier); 655 526 // coming from above: divide out more LCmultiplier if possible 656 527 if (foundMultiplier) 657 528 { 658 529 foundMultiplier= false; 659 index=1; 660 iter2= factors; 661 for (iter= contents; iter.hasItem(); iter++, iter2++, index++) 662 { 663 if (!iter.getItem().isOne() && 664 fdivides (iter.getItem(), LCmultiplier)) 665 { 666 if (!isOnlyLeadingCoeff (iter2.getItem())) // factor is more than just leading coeff 667 { 668 int index2= 1; 669 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 670 iter2++, index2++) 671 { 672 if (index2 == index) 673 { 674 iter2.getItem() /= iter.getItem(); 675 foundMultiplier= true; 676 break; 677 } 678 } 679 A /= iter.getItem(); 680 LCmultiplier /= iter.getItem(); 681 iter.getItem()= 1; 682 } 683 else if (fdivides (getVars (LCmultiplier), testVars))//factor consists of just leading coeff 684 { 685 Variable xx= Variable (2); 686 CanonicalForm vars; 687 vars= power (xx, degree (LC (getItem(oldBiFactors, index),1), 688 xx)); 689 for (int i= 0; i < lengthAeval2; i++) 690 { 691 if (oldAeval[i].isEmpty()) 692 continue; 693 xx= oldAeval[i].getFirst().mvar(); 694 vars *= power (xx, degree (LC (getItem(oldAeval[i], index),1), 695 xx)); 696 } 697 if (myGetVars(content(getItem(leadingCoeffs2[lengthAeval2-1],index),1)) 698 /myGetVars (LCmultiplier) == vars) 699 { 700 int index2= 1; 701 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 702 iter2++, index2++) 703 { 704 if (index2 == index) 705 { 706 iter2.getItem() /= LCmultiplier; 707 foundMultiplier= true; 708 break; 709 } 710 } 711 A /= LCmultiplier; 712 iter.getItem()= 1; 713 } 714 } 715 } 716 } 530 LCHeuristic4 (oldBiFactors, oldAeval, contents, factors, testVars, 531 lengthAeval2, leadingCoeffs2, A, LCmultiplier, 532 foundMultiplier); 717 533 } 718 534 else 719 535 { 720 CanonicalForm pLCs= prod (LCs); 721 if (fdivides (pLCs, LC (oldA,1)) && (LC(oldA,1)/pLCs).inCoeffDomain()) // check if the product of the lead coeffs of the primitive factors equals the lead coeff of the old A 722 { 723 A= oldA; 724 iter2= leadingCoeffs2[lengthAeval2-1]; 725 for (iter= contents; iter.hasItem(); iter++, iter2++) 726 iter2.getItem() /= iter.getItem(); 727 foundMultiplier= true; 728 } 536 LCHeuristicCheck (LCs, contents, A, oldA, 537 leadingCoeffs2[lengthAeval2-1], foundMultiplier); 729 538 if (!foundMultiplier && fdivides (getVars (LCmultiplier), testVars)) 730 539 { 731 Variable xx; 732 CFList vars1; 733 CFFList sqrfMultiplier= sqrFree (LCmultiplier); 734 if (sqrfMultiplier.getFirst().factor().inCoeffDomain()) 735 sqrfMultiplier.removeFirst(); 736 sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier); 737 xx= Variable (2); 738 for (iter= oldBiFactors; iter.hasItem(); iter++) 739 vars1.append (power (xx, degree (LC (iter.getItem(),1), xx))); 740 for (int i= 0; i < lengthAeval2; i++) 741 { 742 if (oldAeval[i].isEmpty()) 743 continue; 744 xx= oldAeval[i].getFirst().mvar(); 745 iter2= vars1; 746 for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++) 747 iter2.getItem() *= power(xx,degree (LC (iter.getItem(),1), xx)); 748 } 749 CanonicalForm tmp; 750 iter2= vars1; 751 for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++, 752 iter2++) 753 { 754 tmp= iter.getItem()/LCmultiplier; 755 for (int i=1; i <= tmp.level(); i++) 756 { 757 if (degree(tmp,i) > 0 && 758 (degree(iter2.getItem(),i) > degree (tmp,i))) 759 iter2.getItem() /= power (Variable (i), degree (tmp,i)); 760 } 761 } 762 int multi; 763 for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++) 764 { 765 multi= 0; 766 for (iter= vars1; iter.hasItem(); iter++) 767 { 768 tmp= iter.getItem(); 769 while (fdivides (myGetVars (ii.getItem().factor()), tmp)) 770 { 771 multi++; 772 tmp /= myGetVars (ii.getItem().factor()); 773 } 774 } 775 if (multi == ii.getItem().exp()) 776 { 777 index= 1; 778 for (iter= vars1; iter.hasItem(); iter++, index++) 779 { 780 while (fdivides (myGetVars(ii.getItem().factor()), 781 iter.getItem() 782 ) 783 ) 784 { 785 int index2= 1; 786 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 787 iter2++, index2++) 788 { 789 if (index2 == index) 790 continue; 791 else 792 { 793 tmp= ii.getItem().factor(); 794 iter2.getItem() /= tmp; 795 CFListIterator iter3= evaluation; 796 for (int jj= A.level(); jj > 2; jj--, iter3++) 797 tmp= tmp (iter3.getItem(), jj); 798 if (!tmp.inCoeffDomain()) 799 { 800 int index3= 1; 801 for (iter3= biFactors; iter3.hasItem(); iter3++, 802 index3++) 803 { 804 if (index3 == index2) 805 { 806 iter3.getItem() /= tmp; 807 iter3.getItem() /= Lc (iter3.getItem()); 808 break; 809 } 810 } 811 } 812 A /= ii.getItem().factor(); 813 } 814 } 815 iter.getItem() /= getVars (ii.getItem().factor()); 816 } 817 } 818 } 819 else 820 { 821 index= 1; 822 for (iter= vars1; iter.hasItem(); iter++, index++) 823 { 824 if (!fdivides (myGetVars (ii.getItem().factor()), 825 iter.getItem() 826 ) 827 ) 828 { 829 int index2= 1; 830 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 831 iter2++, index2++) 832 { 833 if (index2 == index) 834 { 835 tmp= power (ii.getItem().factor(), ii.getItem().exp()); 836 iter2.getItem() /= tmp; 837 A /= tmp; 838 CFListIterator iter3= evaluation; 839 for (int jj= A.level(); jj > 2; jj--, iter3++) 840 tmp= tmp (iter3.getItem(), jj); 841 if (!tmp.inCoeffDomain()) 842 { 843 int index3= 1; 844 for (iter3= biFactors; iter3.hasItem(); iter3++, 845 index3++) 846 { 847 if (index3 == index2) 848 { 849 iter3.getItem() /= tmp; 850 iter3.getItem() /= Lc (iter3.getItem()); 851 break; 852 } 853 } 854 } 855 } 856 } 857 } 858 } 859 } 860 } 540 LCHeuristic (A, LCmultiplier, biFactors, leadingCoeffs2, oldAeval, 541 lengthAeval2, evaluation, oldBiFactors); 861 542 } 862 543 } … … 866 547 for (int i= lengthAeval2-1; i > -1; i--) 867 548 leadingCoeffs2[i]= CFList(); 868 prepareLeadingCoeffs (leadingCoeffs2,A.level(),leadingCoeffs, biFactors, 869 evaluation); 870 Aeval= evaluateAtEval (A, evaluation, 2); 871 872 hh= 1/Lc (Aeval.getFirst()); 873 874 for (CFListIterator i= Aeval; i.hasItem(); i++) 875 i.getItem() *= hh; 876 877 A *= hh; 549 prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(),leadingCoeffs, 550 biFactors, evaluation); 878 551 } 879 552 factors= CFList(); … … 898 571 { 899 572 LCheuristic= true; 900 int index; 901 Variable xx; 902 CFList vars1; 903 CFFList sqrfMultiplier= sqrFree (LCmultiplier); 904 if (sqrfMultiplier.getFirst().factor().inCoeffDomain()) 905 sqrfMultiplier.removeFirst(); 906 sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier); 907 xx= Variable (2); 908 for (iter= oldBiFactors; iter.hasItem(); iter++) 909 vars1.append (power (xx, degree (LC (iter.getItem(),1), xx))); 910 for (int i= 0; i < lengthAeval2; i++) 911 { 912 if (oldAeval[i].isEmpty()) 913 continue; 914 xx= oldAeval[i].getFirst().mvar(); 915 iter2= vars1; 916 for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++) 917 iter2.getItem() *= power (xx, degree (LC (iter.getItem(),1), xx)); 918 } 919 CanonicalForm tmp; 920 iter2= vars1; 921 for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++, iter2++) 922 { 923 tmp= iter.getItem()/LCmultiplier; 924 for (int i=1; i <= tmp.level(); i++) 925 { 926 if (degree(tmp,i) > 0 && (degree(iter2.getItem(),i) > degree (tmp,i))) 927 iter2.getItem() /= power (Variable (i), degree (tmp,i)); 928 } 929 } 930 int multi; 931 for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++) 932 { 933 multi= 0; 934 for (iter= vars1; iter.hasItem(); iter++) 935 { 936 tmp= iter.getItem(); 937 while (fdivides (myGetVars (ii.getItem().factor()), tmp)) 938 { 939 multi++; 940 tmp /= myGetVars (ii.getItem().factor()); 941 } 942 } 943 if (multi == ii.getItem().exp()) 944 { 945 index= 1; 946 for (iter= vars1; iter.hasItem(); iter++, index++) 947 { 948 while (fdivides (myGetVars (ii.getItem().factor()), iter.getItem())) 949 { 950 int index2= 1; 951 for (iter2= leadingCoeffs2[lengthAeval2-1];iter2.hasItem();iter2++, 952 index2++) 953 { 954 if (index2 == index) 955 continue; 956 else 957 { 958 tmp= ii.getItem().factor(); 959 iter2.getItem() /= tmp; 960 CFListIterator iter3= evaluation; 961 for (int jj= A.level(); jj > 2; jj--, iter3++) 962 tmp= tmp (iter3.getItem(), jj); 963 if (!tmp.inCoeffDomain()) 964 { 965 int index3= 1; 966 for (iter3= biFactors; iter3.hasItem(); iter3++, index3++) 967 { 968 if (index3 == index2) 969 { 970 iter3.getItem() /= tmp; 971 iter3.getItem() /= Lc (iter3.getItem()); 972 break; 973 } 974 } 975 } 976 A /= ii.getItem().factor(); 977 } 978 } 979 iter.getItem() /= getVars (ii.getItem().factor()); 980 } 981 } 982 } 983 else 984 { 985 index= 1; 986 for (iter= vars1; iter.hasItem(); iter++, index++) 987 { 988 if (!fdivides (myGetVars (ii.getItem().factor()), iter.getItem())) 989 { 990 int index2= 1; 991 for (iter2= leadingCoeffs2[lengthAeval2-1];iter2.hasItem();iter2++, 992 index2++) 993 { 994 if (index2 == index) 995 { 996 tmp= power (ii.getItem().factor(), ii.getItem().exp()); 997 iter2.getItem() /= tmp; 998 A /= tmp; 999 CFListIterator iter3= evaluation; 1000 for (int jj= A.level(); jj > 2; jj--, iter3++) 1001 tmp= tmp (iter3.getItem(), jj); 1002 if (!tmp.inCoeffDomain()) 1003 { 1004 int index3= 1; 1005 for (iter3= biFactors; iter3.hasItem(); iter3++, index3++) 1006 { 1007 if (index3 == index2) 1008 { 1009 iter3.getItem() /= tmp; 1010 iter3.getItem() /= Lc (iter3.getItem()); 1011 break; 1012 } 1013 } 1014 } 1015 } 1016 } 1017 } 1018 } 1019 } 1020 } 573 LCHeuristic (A, LCmultiplier, biFactors, leadingCoeffs2, oldAeval, 574 lengthAeval2, evaluation, oldBiFactors); 1021 575 1022 576 leadingCoeffs= leadingCoeffs2[lengthAeval2-1]; 1023 577 for (int i= lengthAeval2-1; i > -1; i--) 1024 578 leadingCoeffs2[i]= CFList(); 1025 prepareLeadingCoeffs (leadingCoeffs2,A.level(),leadingCoeffs, biFactors, 1026 evaluation); 1027 Aeval= evaluateAtEval (A, evaluation, 2); 1028 1029 hh= 1/Lc (Aeval.getFirst()); 1030 1031 for (CFListIterator i= Aeval; i.hasItem(); i++) 1032 i.getItem() *= hh; 1033 1034 A *= hh; 579 prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(),leadingCoeffs, 580 biFactors, evaluation); 1035 581 1036 582 if (!fdivides (LC (oldA,1),prod (leadingCoeffs2[lengthAeval2-1]))) … … 1087 633 commonDenominators.append (bCommonDen (iter.getItem())); 1088 634 CanonicalForm tmp1, tmp2, tmp3=1; 635 CFListIterator iter2; 1089 636 for (int i= 0; i < lengthAeval2; i++) 1090 637 { -
factory/facFqBivar.h
ra1da6f r65148c4 49 49 ); 50 50 51 /// factorize a squarefree bivariate polynomial over \f$ F_{p} \f$. 52 /// 53 /// @return @a FpBiSqrfFactorize returns a list of monic factors, the first 54 /// element is the leading coefficient. 55 /// @sa FqBiSqrfFactorize(), GFBiSqrfFactorize() 56 inline 57 CFList FpBiSqrfFactorize (const CanonicalForm & G ///< [in] a bivariate poly 58 ) 51 inline CFList 52 biSqrfFactorizeHelper (const CanonicalForm& G, ExtensionInfo& info) 59 53 { 60 ExtensionInfo info= ExtensionInfo (false);61 54 CFMap N; 62 55 CanonicalForm F= compress (G, N); … … 65 58 F /= (contentX*contentY); 66 59 CFFList contentXFactors, contentYFactors; 67 contentXFactors= factorize (contentX); 68 contentYFactors= factorize (contentY); 60 if (info.getAlpha().level() != 1) 61 { 62 contentXFactors= factorize (contentX, info.getAlpha()); 63 contentYFactors= factorize (contentY, info.getAlpha()); 64 } 65 else if (info.getAlpha().level() == 1 && info.getGFDegree() == 1) 66 { 67 contentXFactors= factorize (contentX); 68 contentYFactors= factorize (contentY); 69 } 70 else if (info.getAlpha().level() == 1 && info.getGFDegree() != 1) 71 { 72 CFList bufContentX, bufContentY; 73 bufContentX= biFactorize (contentX, info); 74 bufContentY= biFactorize (contentY, info); 75 for (CFListIterator iter= bufContentX; iter.hasItem(); iter++) 76 contentXFactors.append (CFFactor (iter.getItem(), 1)); 77 for (CFListIterator iter= bufContentY; iter.hasItem(); iter++) 78 contentYFactors.append (CFFactor (iter.getItem(), 1)); 79 } 80 69 81 if (contentXFactors.getFirst().factor().inCoeffDomain()) 70 82 contentXFactors.removeFirst(); … … 97 109 } 98 110 111 /// factorize a squarefree bivariate polynomial over \f$ F_{p} \f$. 112 /// 113 /// @return @a FpBiSqrfFactorize returns a list of monic factors, the first 114 /// element is the leading coefficient. 115 /// @sa FqBiSqrfFactorize(), GFBiSqrfFactorize() 116 inline 117 CFList FpBiSqrfFactorize (const CanonicalForm & G ///< [in] a bivariate poly 118 ) 119 { 120 ExtensionInfo info= ExtensionInfo (false); 121 return biSqrfFactorizeHelper (G, info); 122 } 123 99 124 /// factorize a squarefree bivariate polynomial over \f$ F_{p}(\alpha ) \f$. 100 125 /// … … 108 133 { 109 134 ExtensionInfo info= ExtensionInfo (alpha, false); 110 CFMap N; 111 CanonicalForm F= compress (G, N); 112 CanonicalForm contentX= content (F, 1); 113 CanonicalForm contentY= content (F, 2); 114 F /= (contentX*contentY); 115 CFFList contentXFactors, contentYFactors; 116 contentXFactors= factorize (contentX, alpha); 117 contentYFactors= factorize (contentY, alpha); 118 if (contentXFactors.getFirst().factor().inCoeffDomain()) 119 contentXFactors.removeFirst(); 120 if (contentYFactors.getFirst().factor().inCoeffDomain()) 121 contentYFactors.removeFirst(); 122 if (F.inCoeffDomain()) 123 { 124 CFList result; 125 for (CFFListIterator i= contentXFactors; i.hasItem(); i++) 126 result.append (N (i.getItem().factor())); 127 for (CFFListIterator i= contentYFactors; i.hasItem(); i++) 128 result.append (N (i.getItem().factor())); 129 normalize (result); 130 result.insert (Lc (G)); 131 return result; 132 } 133 mat_ZZ M; 134 vec_ZZ S; 135 F= compress (F, M, S); 136 CFList result= biFactorize (F, info); 137 for (CFListIterator i= result; i.hasItem(); i++) 138 i.getItem()= N (decompress (i.getItem(), M, S)); 139 for (CFFListIterator i= contentXFactors; i.hasItem(); i++) 140 result.append (N(i.getItem().factor())); 141 for (CFFListIterator i= contentYFactors; i.hasItem(); i++) 142 result.append (N (i.getItem().factor())); 143 normalize (result); 144 result.insert (Lc(G)); 145 return result; 135 return biSqrfFactorizeHelper (G, info); 146 136 } 147 137 … … 158 148 "GF as base field expected"); 159 149 ExtensionInfo info= ExtensionInfo (getGFDegree(), gf_name, false); 160 CFMap N; 161 CanonicalForm F= compress (G, N); 162 CanonicalForm contentX= content (F, 1); 163 CanonicalForm contentY= content (F, 2); 164 F /= (contentX*contentY); 165 CFList contentXFactors, contentYFactors; 166 contentXFactors= biFactorize (contentX, info); 167 contentYFactors= biFactorize (contentY, info); 168 if (contentXFactors.getFirst().inCoeffDomain()) 169 contentXFactors.removeFirst(); 170 if (contentYFactors.getFirst().inCoeffDomain()) 171 contentYFactors.removeFirst(); 172 if (F.inCoeffDomain()) 173 { 174 CFList result; 175 for (CFListIterator i= contentXFactors; i.hasItem(); i++) 176 result.append (N (i.getItem())); 177 for (CFListIterator i= contentYFactors; i.hasItem(); i++) 178 result.append (N (i.getItem())); 179 normalize (result); 180 result.insert (Lc (G)); 181 return result; 182 } 183 mat_ZZ M; 184 vec_ZZ S; 185 F= compress (F, M, S); 186 CFList result= biFactorize (F, info); 187 for (CFListIterator i= result; i.hasItem(); i++) 188 i.getItem()= N (decompress (i.getItem(), M, S)); 189 for (CFListIterator i= contentXFactors; i.hasItem(); i++) 190 result.append (N(i.getItem())); 191 for (CFListIterator i= contentYFactors; i.hasItem(); i++) 192 result.append (N (i.getItem())); 193 normalize (result); 194 result.insert (Lc(G)); 195 return result; 150 return biSqrfFactorizeHelper (G, info); 196 151 } 197 152 -
factory/facFqFactorize.cc
ra1da6f r65148c4 49 49 TIMING_DEFINE_PRINT(fac_fq_check_mainvar) 50 50 TIMING_DEFINE_PRINT(fac_fq_compress) 51 51 52 52 53 static inline … … 1208 1209 int k= factors1.length(); 1209 1210 int l= factors2.length(); 1210 int n= 1;1211 int n= 0; 1211 1212 int m; 1212 1213 CFFListIterator j; 1213 1214 for (CFFListIterator i= factors1; (n < k && i.hasItem()); i++, n++) 1214 1215 { 1215 m= 1;1216 m= 0; 1216 1217 for (j= factors2; (m < l && j.hasItem()); j++, m++) 1217 1218 { … … 1324 1325 const CFArray& evalPoint) 1325 1326 { 1326 CanonicalForm tmp;1327 CFListIterator j;1328 for (CFListIterator i= uniFactors; i.hasItem(); i++)1329 {1330 tmp= i.getItem();1331 if (i.hasItem())1332 i++;1333 else1334 break;1335 for (j= i; j.hasItem(); j++)1336 {1337 if (tmp == j.getItem())1338 return 0;1339 }1340 }1341 1342 1327 CanonicalForm F= G; 1343 1328 CFFList sqrfFactorization; … … 1359 1344 1360 1345 CFFList sqrfFactors; 1346 CanonicalForm tmp; 1361 1347 CFList tmp2; 1362 1348 int k= 0; … … 1484 1470 result.insert (Lc (LCF)); 1485 1471 else 1486 {1487 for (CFListIterator i= result; i.hasItem(); i++)1488 i.getItem() *= LCF;1489 1472 result.insert (LCF); 1490 } 1473 1491 1474 return result; 1492 1475 } … … 1552 1535 bufBufFactors= bufFactors; 1553 1536 evalPoint= CFArray (evaluation.length() - 1); 1554 for (int k= 0; k < evaluation.length()-1; k++)1537 for (int k= 1; k < evaluation.length(); k++) 1555 1538 { 1556 1539 if (N (Variable (k+1)).level() != y.level()) 1557 evalPoint[k ]= buf[k+1];1540 evalPoint[k-1]= buf[k]; 1558 1541 else 1559 evalPoint[k ]= buf[0];1542 evalPoint[k-1]= buf[0]; 1560 1543 } 1561 1544 pass= testFactors (bufF, bufBufFactors, alpha, sqrfPartF, bufFactors, … … 1579 1562 result.append (1); 1580 1563 result= distributeContent (result, differentSecondVarLCs, lSecondVarLCs); 1581 if (!result.getFirst().inCoeffDomain())1582 {1583 CFListIterator iter= result;1584 CanonicalForm tmp= iter.getItem();1585 iter++;1586 for (; iter.hasItem(); iter++)1587 iter.getItem() *= tmp;1588 }1589 1564 y= Variable (1); 1590 1565 delete [] bufSqrfFactors; … … 1601 1576 result.append (1); 1602 1577 result= distributeContent (result, differentSecondVarLCs, lSecondVarLCs); 1603 if (!result.getFirst().inCoeffDomain())1604 {1605 CFListIterator iter= result;1606 CanonicalForm tmp= iter.getItem();1607 iter++;1608 for (; iter.hasItem(); iter++)1609 iter.getItem() *= tmp;1610 }1611 1578 y= Variable (1); 1612 1579 delete [] bufSqrfFactors; … … 1683 1650 { 1684 1651 int* liftBounds= new int [sqrfPartF.level() - 1]; 1685 liftBounds [0]= liftBound;1686 1652 bool noOneToOne= false; 1687 1653 CFList *leadingCoeffs2= new CFList [sqrfPartF.level()-2]; … … 1700 1666 1701 1667 int liftBoundsLength= sqrfPartF.level() - 1; 1702 for (int i= 1; i < liftBoundsLength; i++)1668 for (int i= 0; i < liftBoundsLength; i++) 1703 1669 liftBounds [i]= degree (sqrfPartF, i + 2) + 1; 1704 1670 evalSqrfPartF= evaluateAtZero (sqrfPartF); … … 1764 1730 if (!result.getFirst().inCoeffDomain()) 1765 1731 { 1766 CFListIterator i= result; 1767 CanonicalForm tmp; 1732 // prepare input for recursion 1768 1733 if (foundDifferent) 1769 i.getItem()= swapvar (i.getItem(), Variable (2), y); 1770 1771 tmp= i.getItem(); 1772 1773 i++; 1774 for (; i.hasItem(); i++) 1775 { 1776 if (foundDifferent) 1777 i.getItem()= swapvar (i.getItem(), Variable (2), y)*tmp; 1734 { 1735 for (CFListIterator i= result; i.hasItem(); i++) 1736 i.getItem()= swapvar (i.getItem(), Variable (2), y); 1737 CFList l= differentSecondVarLCs [j]; 1738 for (CFListIterator i= l; i.hasItem(); i++) 1739 i.getItem()= swapvar (i.getItem(), y, z); 1740 differentSecondVarLCs [j]= l; 1741 } 1742 1743 F= result.getFirst(); 1744 int level= 0; 1745 if (foundDifferent) 1746 { 1747 level= y.level() - 2; 1748 for (int i= y.level(); i > 1; i--) 1749 { 1750 if (degree (F,i) > 0) 1751 { 1752 if (y.level() == 3) 1753 level= 0; 1754 else 1755 level= i-3; 1756 } 1757 } 1758 } 1759 lcretry: 1760 if (lSecondVarLCs - level > 0) 1761 { 1762 CFList evaluation2= evaluation; 1763 int j= lSecondVarLCs+2; 1764 CanonicalForm swap; 1765 CFListIterator i; 1766 for (i= evaluation2; i.hasItem(); i++, j--) 1767 { 1768 if (j==y.level()) 1769 { 1770 swap= i.getItem(); 1771 i.getItem()= evaluation2.getLast(); 1772 evaluation2.removeLast(); 1773 evaluation2.append (swap); 1774 } 1775 } 1776 1777 CFList newLCs= differentSecondVarLCs[level]; 1778 if (newLCs.isEmpty()) 1779 { 1780 if (degree (F, level+3) > 0) 1781 { 1782 delete [] bufSqrfFactors; 1783 return result; //TODO handle this case 1784 } 1785 level=level+1; 1786 goto lcretry; 1787 } 1788 i= newLCs; 1789 CFListIterator iter= result; 1790 iter++; 1791 CanonicalForm quot; 1792 for (;iter.hasItem(); iter++, i++) 1793 { 1794 swap= iter.getItem(); 1795 if (degree (swap, level+3) > 0) 1796 { 1797 int count= evaluation.length()+1; 1798 for (CFListIterator iter2= evaluation2; iter2.hasItem(); iter2++, 1799 count--) 1800 { 1801 if (count != level+3) 1802 swap= swap (iter2.getItem(), count); 1803 } 1804 if (fdivides (swap, i.getItem(), quot)) 1805 i.getItem()= quot; 1806 } 1807 } 1808 CFList * differentSecondVarLCs2= new CFList [lSecondVarLCs - level - 1]; 1809 for (int j= level+1; j < lSecondVarLCs; j++) 1810 { 1811 if (degree (F, j+3) > 0) 1812 { 1813 if (!differentSecondVarLCs[j].isEmpty()) 1814 { 1815 differentSecondVarLCs2[j - level - 1]= differentSecondVarLCs[j]; 1816 i= differentSecondVarLCs2[j-level - 1]; 1817 iter=result; 1818 iter++; 1819 for (;iter.hasItem(); iter++, i++) 1820 { 1821 swap= iter.getItem(); 1822 if (degree (swap, j+3) > 0) 1823 { 1824 int count= evaluation.length()+1; 1825 for (CFListIterator iter2= evaluation2; iter2.hasItem();iter2++, 1826 count--) 1827 { 1828 if (count != j+3) 1829 swap= swap (iter2.getItem(), count); 1830 } 1831 if (fdivides (swap, i.getItem(), quot)) 1832 i.getItem()= quot; 1833 } 1834 } 1835 } 1836 } 1837 } 1838 1839 for (int j= 0; j < level+1; j++) 1840 evaluation2.removeLast(); 1841 Variable dummyvar= Variable (1); 1842 1843 CanonicalForm newLCF= result.getFirst(); 1844 newLCF=swapvar (newLCF, Variable (2), Variable (level+3)); 1845 for (i=newLCs; i.hasItem(); i++) 1846 i.getItem()= swapvar (i.getItem(), Variable (2), Variable (level+3)); 1847 for (int j= 1; j < lSecondVarLCs-level;j++) 1848 { 1849 for (i= differentSecondVarLCs2[j-1]; i.hasItem(); i++) 1850 i.getItem()= swapvar (i.getItem(), Variable (2+j), 1851 Variable (level+3+j)); 1852 newLCF= swapvar (newLCF, Variable (2+j), Variable (level+3+j)); 1853 } 1854 1855 CFList recursiveResult= 1856 precomputeLeadingCoeff (newLCF, newLCs, alpha, evaluation2, 1857 differentSecondVarLCs2, lSecondVarLCs - level - 1, 1858 dummyvar); 1859 1860 if (dummyvar.level() != 1) 1861 { 1862 for (i= recursiveResult; i.hasItem(); i++) 1863 i.getItem()= swapvar (i.getItem(), Variable (2), dummyvar); 1864 } 1865 for (i= recursiveResult; i.hasItem(); i++) 1866 { 1867 for (int j= lSecondVarLCs-level-1; j > 0; j--) 1868 i.getItem()=swapvar (i.getItem(), Variable (2+j), 1869 Variable (level+3+j)); 1870 i.getItem()= swapvar (i.getItem(), Variable (2), Variable (level+3)); 1871 } 1872 1873 if (recursiveResult.getFirst() == result.getFirst()) 1874 { 1875 delete [] bufSqrfFactors; 1876 delete [] differentSecondVarLCs2; 1877 return result; 1878 } 1778 1879 else 1779 i.getItem() *= tmp; 1880 { 1881 iter=recursiveResult; 1882 i= result; 1883 i.getItem()= iter.getItem(); 1884 i++; 1885 iter++; 1886 for (; i.hasItem(); i++, iter++) 1887 i.getItem() *= iter.getItem(); 1888 delete [] differentSecondVarLCs2; 1889 } 1780 1890 } 1781 1891 } … … 1984 2094 CFArray l; 1985 2095 int pos, index; 2096 bool leaveLoop=false; 1986 2097 for (int j= 0; j < AevalLength; j++) 1987 2098 { … … 1991 2102 for (iter= evaluation; iter.hasItem(); iter++, i--) 1992 2103 { 1993 if (i == Aeval[j].getFirst().level()) 1994 { 1995 evalPoint= iter.getItem(); 2104 for (iter2= Aeval[j]; iter2.hasItem(); iter2++) 2105 { 2106 if (i == iter2.getItem().level()) 2107 { 2108 evalPoint= iter.getItem(); 2109 leaveLoop= true; 2110 break; 2111 } 2112 } 2113 if (leaveLoop) 2114 { 2115 leaveLoop= false; 1996 2116 break; 1997 2117 } … … 2040 2160 int minFactorsLength) 2041 2161 { 2042 CFListIterator iter ;2162 CFListIterator iter, iter2; 2043 2163 CanonicalForm evalPoint; 2044 2164 int i; … … 2046 2166 Variable y= Variable (2); 2047 2167 CFList list; 2168 bool leaveLoop= false; 2048 2169 for (int j= 0; j < A.level() - 2; j++) 2049 2170 { … … 2054 2175 for (iter= evaluation; iter.hasItem(); iter++, i--) 2055 2176 { 2056 if (i == Aeval[j].getFirst().level()) 2057 { 2058 evalPoint= iter.getItem(); 2177 for (iter2= Aeval[j]; iter2.hasItem(); iter2++) 2178 { 2179 if (i == iter2.getItem().level()) 2180 { 2181 evalPoint= iter.getItem(); 2182 leaveLoop= true; 2183 break; 2184 } 2185 } 2186 if (leaveLoop) 2187 { 2188 leaveLoop= false; 2059 2189 break; 2060 2190 } … … 2072 2202 } 2073 2203 2074 void prepareLeadingCoeffs (CFList*& LCs, int n, const CFList& leadingCoeffs, 2075 const CFList& biFactors, const CFList& evaluation) 2204 void 2205 prepareLeadingCoeffs (CFList*& LCs, CanonicalForm& A, CFList& Aeval, int n, 2206 const CFList& leadingCoeffs, const CFList& biFactors, 2207 const CFList& evaluation) 2076 2208 { 2077 2209 CFList l= leadingCoeffs; … … 2098 2230 j.getItem() *= ii.getItem(); 2099 2231 } 2232 2233 Aeval= evaluateAtEval (A, evaluation, 2); 2234 2235 CanonicalForm hh= 1/Lc (Aeval.getFirst()); 2236 2237 for (iter= Aeval; iter.hasItem(); iter++) 2238 iter.getItem() *= hh; 2239 2240 A *= hh; 2100 2241 } 2101 2242 … … 2217 2358 } 2218 2359 2360 void 2361 changeSecondVariable (CanonicalForm& A, CFList& biFactors, CFList& evaluation, 2362 CFList*& oldAeval, int lengthAeval2, 2363 const CFList& uniFactors, const Variable& w) 2364 { 2365 Variable y= Variable (2); 2366 A= swapvar (A, y, w); 2367 int i= A.level(); 2368 CanonicalForm evalPoint; 2369 for (CFListIterator iter= evaluation; iter.hasItem(); iter++, i--) 2370 { 2371 if (i == w.level()) 2372 { 2373 evalPoint= iter.getItem(); 2374 iter.getItem()= evaluation.getLast(); 2375 evaluation.removeLast(); 2376 evaluation.append (evalPoint); 2377 break; 2378 } 2379 } 2380 for (i= 0; i < lengthAeval2; i++) 2381 { 2382 if (oldAeval[i].isEmpty()) 2383 continue; 2384 if (oldAeval[i].getFirst().level() == w.level()) 2385 { 2386 CFArray tmp= copy (oldAeval[i]); 2387 oldAeval[i]= biFactors; 2388 for (CFListIterator iter= oldAeval[i]; iter.hasItem(); iter++) 2389 iter.getItem()= swapvar (iter.getItem(), w, y); 2390 for (int ii= 0; ii < tmp.size(); ii++) 2391 tmp[ii]= swapvar (tmp[ii], w, y); 2392 CFArray tmp2= CFArray (tmp.size()); 2393 CanonicalForm buf; 2394 for (int ii= 0; ii < tmp.size(); ii++) 2395 { 2396 buf= tmp[ii] (evaluation.getLast(),y); 2397 buf /= Lc (buf); 2398 tmp2[findItem (uniFactors, buf)-1]=tmp[ii]; 2399 } 2400 biFactors= CFList(); 2401 for (int j= 0; j < tmp2.size(); j++) 2402 biFactors.append (tmp2[j]); 2403 } 2404 } 2405 } 2406 2407 void 2408 distributeLCmultiplier (CanonicalForm& A, CFList& leadingCoeffs, 2409 CFList& biFactors, const CFList& evaluation, 2410 const CanonicalForm& LCmultipler) 2411 { 2412 CanonicalForm tmp= power (LCmultipler, biFactors.length() - 1); 2413 A *= tmp; 2414 tmp= LCmultipler; 2415 CFListIterator iter= leadingCoeffs; 2416 for (;iter.hasItem(); iter++) 2417 iter.getItem() *= LCmultipler; 2418 iter= evaluation; 2419 for (int i= A.level(); i > 2; i--, iter++) 2420 tmp= tmp (iter.getItem(), i); 2421 if (!tmp.inCoeffDomain()) 2422 { 2423 for (CFListIterator i= biFactors; i.hasItem(); i++) 2424 { 2425 i.getItem() *= tmp/LC (i.getItem(), 1); 2426 i.getItem() /= Lc (i.getItem()); 2427 } 2428 } 2429 } 2430 2431 void 2432 LCHeuristic (CanonicalForm& A, const CanonicalForm& LCmultiplier, 2433 CFList& biFactors, CFList*& leadingCoeffs, const CFList* oldAeval, 2434 int lengthAeval, const CFList& evaluation, 2435 const CFList& oldBiFactors) 2436 { 2437 CFListIterator iter, iter2; 2438 int index; 2439 Variable xx; 2440 CFList vars1; 2441 CFFList sqrfMultiplier= sqrFree (LCmultiplier); 2442 if (sqrfMultiplier.getFirst().factor().inCoeffDomain()) 2443 sqrfMultiplier.removeFirst(); 2444 sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier); 2445 xx= Variable (2); 2446 for (iter= oldBiFactors; iter.hasItem(); iter++) 2447 vars1.append (power (xx, degree (LC (iter.getItem(),1), xx))); 2448 for (int i= 0; i < lengthAeval; i++) 2449 { 2450 if (oldAeval[i].isEmpty()) 2451 continue; 2452 xx= oldAeval[i].getFirst().mvar(); 2453 iter2= vars1; 2454 for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++) 2455 iter2.getItem() *= power (xx, degree (LC (iter.getItem(),1), xx)); 2456 } 2457 CanonicalForm tmp; 2458 iter2= vars1; 2459 for (iter= leadingCoeffs[lengthAeval-1]; iter.hasItem(); iter++, iter2++) 2460 { 2461 tmp= iter.getItem()/LCmultiplier; 2462 for (int i=1; i <= tmp.level(); i++) 2463 { 2464 if (degree (tmp,i) > 0 && (degree (iter2.getItem(),i) > degree (tmp,i))) 2465 iter2.getItem() /= power (Variable (i), degree (tmp,i)); 2466 } 2467 } 2468 int multi; 2469 for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++) 2470 { 2471 multi= 0; 2472 for (iter= vars1; iter.hasItem(); iter++) 2473 { 2474 tmp= iter.getItem(); 2475 while (fdivides (myGetVars (ii.getItem().factor()), tmp)) 2476 { 2477 multi++; 2478 tmp /= myGetVars (ii.getItem().factor()); 2479 } 2480 } 2481 if (multi == ii.getItem().exp()) 2482 { 2483 index= 1; 2484 for (iter= vars1; iter.hasItem(); iter++, index++) 2485 { 2486 while (fdivides (myGetVars (ii.getItem().factor()), iter.getItem())) 2487 { 2488 int index2= 1; 2489 for (iter2= leadingCoeffs[lengthAeval-1]; iter2.hasItem();iter2++, 2490 index2++) 2491 { 2492 if (index2 == index) 2493 continue; 2494 else 2495 { 2496 tmp= ii.getItem().factor(); 2497 iter2.getItem() /= tmp; 2498 CFListIterator iter3= evaluation; 2499 for (int jj= A.level(); jj > 2; jj--, iter3++) 2500 tmp= tmp (iter3.getItem(), jj); 2501 if (!tmp.inCoeffDomain()) 2502 { 2503 int index3= 1; 2504 for (iter3= biFactors; iter3.hasItem(); iter3++, index3++) 2505 { 2506 if (index3 == index2) 2507 { 2508 iter3.getItem() /= tmp; 2509 iter3.getItem() /= Lc (iter3.getItem()); 2510 break; 2511 } 2512 } 2513 } 2514 A /= ii.getItem().factor(); 2515 } 2516 } 2517 iter.getItem() /= getVars (ii.getItem().factor()); 2518 } 2519 } 2520 } 2521 else 2522 { 2523 index= 1; 2524 for (iter= vars1; iter.hasItem(); iter++, index++) 2525 { 2526 if (!fdivides (myGetVars (ii.getItem().factor()), iter.getItem())) 2527 { 2528 int index2= 1; 2529 for (iter2= leadingCoeffs[lengthAeval-1];iter2.hasItem();iter2++, 2530 index2++) 2531 { 2532 if (index2 == index) 2533 { 2534 tmp= power (ii.getItem().factor(), ii.getItem().exp()); 2535 iter2.getItem() /= tmp; 2536 A /= tmp; 2537 CFListIterator iter3= evaluation; 2538 for (int jj= A.level(); jj > 2; jj--, iter3++) 2539 tmp= tmp (iter3.getItem(), jj); 2540 if (!tmp.inCoeffDomain()) 2541 { 2542 int index3= 1; 2543 for (iter3= biFactors; iter3.hasItem(); iter3++, index3++) 2544 { 2545 if (index3 == index2) 2546 { 2547 iter3.getItem() /= tmp; 2548 iter3.getItem() /= Lc (iter3.getItem()); 2549 break; 2550 } 2551 } 2552 } 2553 } 2554 } 2555 } 2556 } 2557 } 2558 } 2559 } 2560 2561 void 2562 LCHeuristicCheck (const CFList& LCs, const CFList& contents, CanonicalForm& A, 2563 const CanonicalForm& oldA, CFList& leadingCoeffs, 2564 bool& foundTrueMultiplier) 2565 { 2566 CanonicalForm pLCs= prod (LCs); 2567 if (fdivides (pLCs, LC (oldA,1)) && (LC(oldA,1)/pLCs).inCoeffDomain()) // check if the product of the lead coeffs of the primitive factors equals the lead coeff of the old A 2568 { 2569 A= oldA; 2570 CFListIterator iter2= leadingCoeffs; 2571 for (CFListIterator iter= contents; iter.hasItem(); iter++, iter2++) 2572 iter2.getItem() /= iter.getItem(); 2573 foundTrueMultiplier= true; 2574 } 2575 } 2576 2577 void 2578 LCHeuristic2 (const CanonicalForm& LCmultiplier, const CFList& factors, 2579 CFList& leadingCoeffs, CFList& contents, CFList& LCs, 2580 bool& foundTrueMultiplier) 2581 { 2582 CanonicalForm cont; 2583 int index= 1; 2584 CFListIterator iter2; 2585 for (CFListIterator iter= factors; iter.hasItem(); iter++, index++) 2586 { 2587 cont= content (iter.getItem(), 1); 2588 cont= gcd (cont, LCmultiplier); 2589 contents.append (cont); 2590 if (cont.inCoeffDomain()) // trivial content->LCmultiplier needs to go there 2591 { 2592 foundTrueMultiplier= true; 2593 int index2= 1; 2594 for (iter2= leadingCoeffs; iter2.hasItem(); iter2++, index2++) 2595 { 2596 if (index2 == index) 2597 continue; 2598 iter2.getItem() /= LCmultiplier; 2599 } 2600 break; 2601 } 2602 else 2603 LCs.append (LC (iter.getItem()/cont, 1)); 2604 } 2605 } 2606 2607 void 2608 LCHeuristic3 (const CanonicalForm& LCmultiplier, const CFList& factors, 2609 const CFList& oldBiFactors, const CFList& contents, 2610 const CFList* oldAeval, CanonicalForm& A, CFList*& leadingCoeffs, 2611 int lengthAeval, bool& foundMultiplier) 2612 { 2613 int index= 1; 2614 CFListIterator iter, iter2= factors; 2615 for (iter= contents; iter.hasItem(); iter++, iter2++, index++) 2616 { 2617 if (fdivides (iter.getItem(), LCmultiplier)) 2618 { 2619 if ((LCmultiplier/iter.getItem()).inCoeffDomain() && 2620 !isOnlyLeadingCoeff(iter2.getItem())) //content divides LCmultiplier completely and factor consists of more terms than just the leading coeff 2621 { 2622 Variable xx= Variable (2); 2623 CanonicalForm vars; 2624 vars= power (xx, degree (LC (getItem(oldBiFactors, index),1), 2625 xx)); 2626 for (int i= 0; i < lengthAeval; i++) 2627 { 2628 if (oldAeval[i].isEmpty()) 2629 continue; 2630 xx= oldAeval[i].getFirst().mvar(); 2631 vars *= power (xx, degree (LC (getItem(oldAeval[i], index),1), 2632 xx)); 2633 } 2634 if (vars.level() <= 2) 2635 { 2636 int index2= 1; 2637 for (CFListIterator iter3= leadingCoeffs[lengthAeval-1]; 2638 iter3.hasItem(); iter3++, index2++) 2639 { 2640 if (index2 == index) 2641 { 2642 iter3.getItem() /= LCmultiplier; 2643 break; 2644 } 2645 } 2646 A /= LCmultiplier; 2647 foundMultiplier= true; 2648 iter.getItem()= 1; 2649 } 2650 } 2651 } 2652 } 2653 } 2654 2655 void 2656 LCHeuristic4 (const CFList& oldBiFactors, const CFList* oldAeval, 2657 const CFList& contents, const CFList& factors, 2658 const CanonicalForm& testVars, int lengthAeval, 2659 CFList*& leadingCoeffs, CanonicalForm& A, 2660 CanonicalForm& LCmultiplier, bool& foundMultiplier) 2661 { 2662 int index=1; 2663 CFListIterator iter, iter2= factors; 2664 for (iter= contents; iter.hasItem(); iter++, iter2++, index++) 2665 { 2666 if (!iter.getItem().isOne() && 2667 fdivides (iter.getItem(), LCmultiplier)) 2668 { 2669 if (!isOnlyLeadingCoeff (iter2.getItem())) // factor is more than just leading coeff 2670 { 2671 int index2= 1; 2672 for (iter2= leadingCoeffs[lengthAeval-1]; iter2.hasItem(); 2673 iter2++, index2++) 2674 { 2675 if (index2 == index) 2676 { 2677 iter2.getItem() /= iter.getItem(); 2678 foundMultiplier= true; 2679 break; 2680 } 2681 } 2682 A /= iter.getItem(); 2683 LCmultiplier /= iter.getItem(); 2684 iter.getItem()= 1; 2685 } 2686 else if (fdivides (getVars (LCmultiplier), testVars))//factor consists of just leading coeff 2687 { 2688 Variable xx= Variable (2); 2689 CanonicalForm vars; 2690 vars= power (xx, degree (LC (getItem(oldBiFactors, index),1), 2691 xx)); 2692 for (int i= 0; i < lengthAeval; i++) 2693 { 2694 if (oldAeval[i].isEmpty()) 2695 continue; 2696 xx= oldAeval[i].getFirst().mvar(); 2697 vars *= power (xx, degree (LC (getItem(oldAeval[i], index),1), 2698 xx)); 2699 } 2700 if (myGetVars(content(getItem(leadingCoeffs[lengthAeval-1],index),1)) 2701 /myGetVars (LCmultiplier) == vars) 2702 { 2703 int index2= 1; 2704 for (iter2= leadingCoeffs[lengthAeval-1]; iter2.hasItem(); 2705 iter2++, index2++) 2706 { 2707 if (index2 == index) 2708 { 2709 iter2.getItem() /= LCmultiplier; 2710 foundMultiplier= true; 2711 break; 2712 } 2713 } 2714 A /= LCmultiplier; 2715 iter.getItem()= 1; 2716 } 2717 } 2718 } 2719 } 2720 } 2721 2219 2722 CFList 2220 2723 extFactorize (const CanonicalForm& F, const ExtensionInfo& info); … … 2362 2865 bool fail= false; 2363 2866 int swapLevel2= 0; 2364 int level;2867 //int level; 2365 2868 int factorNums= 3; 2366 2869 CFList biFactors, bufBiFactors; … … 2391 2894 if (fail && (i == 0)) 2392 2895 { 2393 if (!swapLevel)2896 /*if (!swapLevel) //uncomment to reenable search for new main variable 2394 2897 level= 2; 2395 2898 else 2396 level= swapLevel + 1; 2397 2398 CanonicalForm g;2399 swapLevel2= newMainVariableSearch (A, Aeval, evaluation, alpha, level, g);2400 2401 if (!swapLevel2) // need to pass to an extension2402 { 2899 level= swapLevel + 1;*/ 2900 2901 //CanonicalForm g; 2902 //swapLevel2= newMainVariableSearch (A, Aeval, evaluation, alpha, level, g); 2903 2904 /*if (!swapLevel2) // need to pass to an extension 2905 {*/ 2403 2906 factors= extFactorize (A, info); 2404 2907 appendSwapDecompress (factors, contentAFactors, N, swapLevel, x); … … 2407 2910 delete [] Aeval2; 2408 2911 return factors; 2409 }2912 /*} 2410 2913 else 2411 2914 { … … 2426 2929 bufA= A; 2427 2930 bufEvaluation= evaluation; 2428 } 2931 }*/ //end uncomment 2429 2932 } 2430 2933 else if (fail && (i > 0)) … … 2591 3094 2592 3095 if (v.level() != 1) 2593 { 2594 A= swapvar (A, y, v); 2595 int i= A.level(); 2596 CanonicalForm evalPoint; 2597 for (CFListIterator iter= evaluation; iter.hasItem(); iter++, i--) 2598 { 2599 if (i == v.level()) 2600 { 2601 evalPoint= iter.getItem(); 2602 iter.getItem()= evaluation.getLast(); 2603 evaluation.removeLast(); 2604 evaluation.append (evalPoint); 2605 break; 2606 } 2607 } 2608 for (i= 0; i < lengthAeval2; i++) 2609 { 2610 if (oldAeval[i].isEmpty()) 2611 continue; 2612 if (oldAeval[i].getFirst().level() == v.level()) 2613 { 2614 CFArray tmp= copy (oldAeval[i]); 2615 oldAeval[i]= biFactors; 2616 for (CFListIterator iter= oldAeval[i]; iter.hasItem(); iter++) 2617 iter.getItem()= swapvar (iter.getItem(), v, y); 2618 for (int ii= 0; ii < tmp.size(); ii++) 2619 tmp[ii]= swapvar (tmp[ii], v, y); 2620 CFArray tmp2= CFArray (tmp.size()); 2621 CanonicalForm buf; 2622 for (int ii= 0; ii < tmp.size(); ii++) 2623 { 2624 buf= tmp[ii] (evaluation.getLast(),y); 2625 buf /= Lc (buf); 2626 tmp2[findItem (uniFactors, buf)-1]=tmp[ii]; 2627 } 2628 biFactors= CFList(); 2629 for (int j= 0; j < tmp2.size(); j++) 2630 biFactors.append (tmp2[j]); 2631 } 2632 } 2633 } 2634 2635 CFListIterator iter; 3096 changeSecondVariable (A, biFactors, evaluation, oldAeval, lengthAeval2, 3097 uniFactors, v); 3098 2636 3099 CanonicalForm oldA= A; 2637 3100 CFList oldBiFactors= biFactors; 2638 if (!leadingCoeffs.getFirst().inCoeffDomain())2639 {2640 CanonicalForm tmp= power (leadingCoeffs.getFirst(), biFactors.length() - 1);2641 A *= tmp;2642 tmp= leadingCoeffs.getFirst();2643 iter= evaluation;2644 for (int i= A.level(); i > 2; i--, iter++)2645 tmp= tmp (iter.getItem(), i);2646 if (!tmp.inCoeffDomain())2647 {2648 for (CFListIterator i= biFactors; i.hasItem(); i++)2649 {2650 i.getItem() *= tmp/LC (i.getItem(), 1);2651 i.getItem() /= Lc (i.getItem());2652 }2653 }2654 }2655 3101 2656 3102 CanonicalForm LCmultiplier= leadingCoeffs.getFirst(); … … 2658 3104 leadingCoeffs.removeFirst(); 2659 3105 3106 if (!LCmultiplierIsConst) 3107 distributeLCmultiplier (A, leadingCoeffs, biFactors, evaluation, LCmultiplier); 3108 2660 3109 //prepare leading coefficients 2661 3110 CFList* leadingCoeffs2= new CFList [lengthAeval2]; 2662 prepareLeadingCoeffs (leadingCoeffs2, A.level(), leadingCoeffs, biFactors, 2663 evaluation); 2664 2665 Aeval= evaluateAtEval (A, evaluation, 2); 2666 CanonicalForm hh= 1/Lc (Aeval.getFirst()); 2667 for (iter= Aeval; iter.hasItem(); iter++) 2668 iter.getItem() *= hh; 2669 2670 A *= hh; 2671 2672 2673 CFListIterator iter2; 3111 prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(), leadingCoeffs, 3112 biFactors, evaluation); 3113 3114 CFListIterator iter; 2674 3115 CFList bufLeadingCoeffs2= leadingCoeffs2[lengthAeval2-1]; 2675 3116 bufBiFactors= biFactors; 2676 3117 bufA= A; 2677 CanonicalForm bufLCmultiplier= LCmultiplier; 2678 CanonicalForm testVars; 3118 CanonicalForm testVars, bufLCmultiplier= LCmultiplier; 2679 3119 if (!LCmultiplierIsConst) 2680 3120 { … … 2752 3192 LCheuristic= true; 2753 3193 factors= oldFactors; 2754 CanonicalForm cont;2755 3194 CFList contents, LCs; 2756 int index=1;2757 3195 bool foundTrueMultiplier= false; 2758 for (iter= factors; iter.hasItem(); iter++, index++) 2759 { 2760 cont= content (iter.getItem(), 1); 2761 cont= gcd (cont , LCmultiplier); 2762 contents.append (cont); 2763 if (cont.inCoeffDomain()) // trivial content->LCmultiplier needs to go there 2764 { 2765 foundTrueMultiplier= true; 2766 int index2= 1; 2767 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); iter2++, 2768 index2++) 2769 { 2770 if (index2 == index) 2771 continue; 2772 iter2.getItem() /= LCmultiplier; 2773 } 3196 LCHeuristic2 (LCmultiplier, factors, leadingCoeffs2[lengthAeval2-1], 3197 contents, LCs, foundTrueMultiplier); 3198 if (foundTrueMultiplier) 3199 { 2774 3200 A= oldA; 2775 3201 leadingCoeffs= leadingCoeffs2[lengthAeval2-1]; 2776 3202 for (int i= lengthAeval2-1; i > -1; i--) 2777 3203 leadingCoeffs2[i]= CFList(); 2778 prepareLeadingCoeffs (leadingCoeffs2, A.level(), leadingCoeffs, 2779 biFactors, evaluation ); 2780 Aeval= evaluateAtEval (A, evaluation, 2); 2781 2782 hh= 1/Lc (Aeval.getFirst()); 2783 2784 for (iter2= Aeval; iter2.hasItem(); iter2++) 2785 iter2.getItem() *= hh; 2786 2787 A *= hh; 2788 break; 2789 } 2790 else 2791 LCs.append (LC (iter.getItem()/cont, 1)); 2792 } 2793 if (!foundTrueMultiplier) 2794 { 2795 index= 1; 2796 iter2= factors; 3204 prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(), 3205 leadingCoeffs, biFactors, evaluation); 3206 } 3207 else 3208 { 2797 3209 bool foundMultiplier= false; 2798 for (iter= contents; iter.hasItem(); iter++, iter2++, index++) 2799 { 2800 if (fdivides (iter.getItem(), LCmultiplier)) 2801 { 2802 if ((LCmultiplier/iter.getItem()).inCoeffDomain() && 2803 !isOnlyLeadingCoeff(iter2.getItem())) //content divides LCmultiplier completely and factor consists of more terms than just the leading coeff 2804 { 2805 Variable xx= Variable (2); 2806 CanonicalForm vars; 2807 vars= power (xx, degree (LC (getItem(oldBiFactors, index),1), 2808 xx)); 2809 for (int i= 0; i < lengthAeval2; i++) 2810 { 2811 if (oldAeval[i].isEmpty()) 2812 continue; 2813 xx= oldAeval[i].getFirst().mvar(); 2814 vars *= power (xx, degree (LC (getItem(oldAeval[i], index),1), 2815 xx)); 2816 } 2817 if (vars.level() <= 2) 2818 { 2819 int index2= 1; 2820 for (CFListIterator iter3= leadingCoeffs2[lengthAeval2-1]; 2821 iter3.hasItem(); iter3++, index2++) 2822 { 2823 if (index2 == index) 2824 { 2825 iter3.getItem() /= LCmultiplier; 2826 break; 2827 } 2828 } 2829 A /= LCmultiplier; 2830 foundMultiplier= true; 2831 iter.getItem()= 1; 2832 } 2833 } 2834 } 2835 } 3210 LCHeuristic3 (LCmultiplier, factors, oldBiFactors, contents, oldAeval, 3211 A, leadingCoeffs2, lengthAeval2, foundMultiplier); 3212 2836 3213 // coming from above: divide out more LCmultiplier if possible 2837 3214 if (foundMultiplier) 2838 3215 { 2839 3216 foundMultiplier= false; 2840 index=1; 2841 iter2= factors; 2842 for (iter= contents; iter.hasItem(); iter++, iter2++, index++) 2843 { 2844 if (!iter.getItem().isOne() && 2845 fdivides (iter.getItem(), LCmultiplier)) 2846 { 2847 if (!isOnlyLeadingCoeff (iter2.getItem())) // factor is more than just leading coeff 2848 { 2849 int index2= 1; 2850 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 2851 iter2++, index2++) 2852 { 2853 if (index2 == index) 2854 { 2855 iter2.getItem() /= iter.getItem(); 2856 foundMultiplier= true; 2857 break; 2858 } 2859 } 2860 A /= iter.getItem(); 2861 LCmultiplier /= iter.getItem(); 2862 iter.getItem()= 1; 2863 } 2864 else if (fdivides (getVars (LCmultiplier), testVars))//factor consists of just leading coeff 2865 { 2866 //TODO maybe use a sqrffree decomposition of LCmultiplier as below 2867 Variable xx= Variable (2); 2868 CanonicalForm vars; 2869 vars= power (xx, degree (LC (getItem(oldBiFactors, index),1), 2870 xx)); 2871 for (int i= 0; i < lengthAeval2; i++) 2872 { 2873 if (oldAeval[i].isEmpty()) 2874 continue; 2875 xx= oldAeval[i].getFirst().mvar(); 2876 vars *= power (xx, degree (LC (getItem(oldAeval[i], index),1), 2877 xx)); 2878 } 2879 if (myGetVars(content(getItem(leadingCoeffs2[lengthAeval2-1],index),1)) 2880 /myGetVars (LCmultiplier) == vars) 2881 { 2882 int index2= 1; 2883 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 2884 iter2++, index2++) 2885 { 2886 if (index2 == index) 2887 { 2888 iter2.getItem() /= LCmultiplier; 2889 foundMultiplier= true; 2890 break; 2891 } 2892 } 2893 A /= LCmultiplier; 2894 iter.getItem()= 1; 2895 } 2896 } 2897 } 2898 } 3217 LCHeuristic4 (oldBiFactors, oldAeval, contents, factors, testVars, 3218 lengthAeval2, leadingCoeffs2, A, LCmultiplier, 3219 foundMultiplier); 2899 3220 } 2900 3221 else 2901 3222 { 2902 CanonicalForm pLCs= prod (LCs); 2903 if (fdivides (pLCs, LC (oldA,1)) && (LC(oldA,1)/pLCs).inCoeffDomain()) // check if the product of the lead coeffs of the primitive factors equals the lead coeff of the old A 2904 { 2905 A= oldA; 2906 iter2= leadingCoeffs2[lengthAeval2-1]; 2907 for (iter= contents; iter.hasItem(); iter++, iter2++) 2908 iter2.getItem() /= iter.getItem(); 2909 foundMultiplier= true; 2910 } 3223 LCHeuristicCheck (LCs, contents, A, oldA, 3224 leadingCoeffs2[lengthAeval2-1], foundMultiplier); 2911 3225 if (!foundMultiplier && fdivides (getVars (LCmultiplier), testVars)) 2912 3226 { 2913 Variable xx; 2914 CFList vars1; 2915 CFFList sqrfMultiplier= sqrFree (LCmultiplier); 2916 if (sqrfMultiplier.getFirst().factor().inCoeffDomain()) 2917 sqrfMultiplier.removeFirst(); 2918 sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier); 2919 xx= Variable (2); 2920 for (iter= oldBiFactors; iter.hasItem(); iter++) 2921 vars1.append (power (xx, degree (LC (iter.getItem(),1), xx))); 2922 for (int i= 0; i < lengthAeval2; i++) 2923 { 2924 if (oldAeval[i].isEmpty()) 2925 continue; 2926 xx= oldAeval[i].getFirst().mvar(); 2927 iter2= vars1; 2928 for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++) 2929 iter2.getItem() *= power(xx,degree (LC (iter.getItem(),1), xx)); 2930 } 2931 CanonicalForm tmp; 2932 iter2= vars1; 2933 for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++, 2934 iter2++) 2935 { 2936 tmp= iter.getItem()/LCmultiplier; 2937 for (int i=1; i <= tmp.level(); i++) 2938 { 2939 if (degree(tmp,i) > 0 && 2940 (degree(iter2.getItem(),i) > degree (tmp,i))) 2941 iter2.getItem() /= power (Variable (i), degree (tmp,i)); 2942 } 2943 } 2944 int multi; 2945 for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++) 2946 { 2947 multi= 0; 2948 for (iter= vars1; iter.hasItem(); iter++) 2949 { 2950 tmp= iter.getItem(); 2951 while (fdivides (myGetVars (ii.getItem().factor()), tmp)) 2952 { 2953 multi++; 2954 tmp /= myGetVars (ii.getItem().factor()); 2955 } 2956 } 2957 if (multi == ii.getItem().exp()) 2958 { 2959 index= 1; 2960 for (iter= vars1; iter.hasItem(); iter++, index++) 2961 { 2962 while (fdivides (myGetVars(ii.getItem().factor()), 2963 iter.getItem() 2964 ) 2965 ) 2966 { 2967 int index2= 1; 2968 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 2969 iter2++, index2++) 2970 { 2971 if (index2 == index) 2972 continue; 2973 else 2974 { 2975 tmp= ii.getItem().factor(); 2976 iter2.getItem() /= tmp; 2977 CFListIterator iter3= evaluation; 2978 for (int jj= A.level(); jj > 2; jj--, iter3++) 2979 tmp= tmp (iter3.getItem(), jj); 2980 if (!tmp.inCoeffDomain()) 2981 { 2982 int index3= 1; 2983 for (iter3= biFactors; iter3.hasItem(); iter3++, 2984 index3++) 2985 { 2986 if (index3 == index2) 2987 { 2988 iter3.getItem() /= tmp; 2989 iter3.getItem() /= Lc (iter3.getItem()); 2990 break; 2991 } 2992 } 2993 } 2994 A /= ii.getItem().factor(); 2995 } 2996 } 2997 iter.getItem() /= getVars (ii.getItem().factor()); 2998 } 2999 } 3000 } 3001 else 3002 { 3003 index= 1; 3004 for (iter= vars1; iter.hasItem(); iter++, index++) 3005 { 3006 if (!fdivides (myGetVars (ii.getItem().factor()), 3007 iter.getItem() 3008 ) 3009 ) 3010 { 3011 int index2= 1; 3012 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 3013 iter2++, index2++) 3014 { 3015 if (index2 == index) 3016 { 3017 tmp= power (ii.getItem().factor(), ii.getItem().exp()); 3018 iter2.getItem() /= tmp; 3019 A /= tmp; 3020 CFListIterator iter3= evaluation; 3021 for (int jj= A.level(); jj > 2; jj--, iter3++) 3022 tmp= tmp (iter3.getItem(), jj); 3023 if (!tmp.inCoeffDomain()) 3024 { 3025 int index3= 1; 3026 for (iter3= biFactors; iter3.hasItem(); iter3++, 3027 index3++) 3028 { 3029 if (index3 == index2) 3030 { 3031 iter3.getItem() /= tmp; 3032 iter3.getItem() /= Lc (iter3.getItem()); 3033 break; 3034 } 3035 } 3036 } 3037 } 3038 } 3039 } 3040 } 3041 } 3042 } 3227 LCHeuristic (A, LCmultiplier, biFactors, leadingCoeffs2, oldAeval, 3228 lengthAeval2, evaluation, oldBiFactors); 3043 3229 } 3044 3230 } … … 3048 3234 for (int i= lengthAeval2-1; i > -1; i--) 3049 3235 leadingCoeffs2[i]= CFList(); 3050 prepareLeadingCoeffs (leadingCoeffs2,A.level(),leadingCoeffs, biFactors, 3051 evaluation); 3052 Aeval= evaluateAtEval (A, evaluation, 2); 3053 3054 hh= 1/Lc (Aeval.getFirst()); 3055 3056 for (CFListIterator i= Aeval; i.hasItem(); i++) 3057 i.getItem() *= hh; 3058 3059 A *= hh; 3236 prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(),leadingCoeffs, 3237 biFactors, evaluation); 3060 3238 } 3061 3239 factors= CFList(); … … 3080 3258 { 3081 3259 LCheuristic= true; 3082 int index; 3083 Variable xx; 3084 CFList vars1; 3085 CFFList sqrfMultiplier= sqrFree (LCmultiplier); 3086 if (sqrfMultiplier.getFirst().factor().inCoeffDomain()) 3087 sqrfMultiplier.removeFirst(); 3088 sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier); 3089 xx= Variable (2); 3090 for (iter= oldBiFactors; iter.hasItem(); iter++) 3091 vars1.append (power (xx, degree (LC (iter.getItem(),1), xx))); 3092 for (int i= 0; i < lengthAeval2; i++) 3093 { 3094 if (oldAeval[i].isEmpty()) 3095 continue; 3096 xx= oldAeval[i].getFirst().mvar(); 3097 iter2= vars1; 3098 for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++) 3099 iter2.getItem() *= power (xx, degree (LC (iter.getItem(),1), xx)); 3100 } 3101 CanonicalForm tmp; 3102 iter2= vars1; 3103 for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++, iter2++) 3104 { 3105 tmp= iter.getItem()/LCmultiplier; 3106 for (int i=1; i <= tmp.level(); i++) 3107 { 3108 if (degree (tmp,i) > 0 && (degree (iter2.getItem(),i) > degree (tmp,i))) 3109 iter2.getItem() /= power (Variable (i), degree (tmp,i)); 3110 } 3111 } 3112 int multi; 3113 for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++) 3114 { 3115 multi= 0; 3116 for (iter= vars1; iter.hasItem(); iter++) 3117 { 3118 tmp= iter.getItem(); 3119 while (fdivides (myGetVars (ii.getItem().factor()), tmp)) 3120 { 3121 multi++; 3122 tmp /= myGetVars (ii.getItem().factor()); 3123 } 3124 } 3125 if (multi == ii.getItem().exp()) 3126 { 3127 index= 1; 3128 for (iter= vars1; iter.hasItem(); iter++, index++) 3129 { 3130 while (fdivides (myGetVars (ii.getItem().factor()), iter.getItem())) 3131 { 3132 int index2= 1; 3133 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem();iter2++, 3134 index2++) 3135 { 3136 if (index2 == index) 3137 continue; 3138 else 3139 { 3140 tmp= ii.getItem().factor(); 3141 iter2.getItem() /= tmp; 3142 CFListIterator iter3= evaluation; 3143 for (int jj= A.level(); jj > 2; jj--, iter3++) 3144 tmp= tmp (iter3.getItem(), jj); 3145 if (!tmp.inCoeffDomain()) 3146 { 3147 int index3= 1; 3148 for (iter3= biFactors; iter3.hasItem(); iter3++, index3++) 3149 { 3150 if (index3 == index2) 3151 { 3152 iter3.getItem() /= tmp; 3153 iter3.getItem() /= Lc (iter3.getItem()); 3154 break; 3155 } 3156 } 3157 } 3158 A /= ii.getItem().factor(); 3159 } 3160 } 3161 iter.getItem() /= getVars (ii.getItem().factor()); 3162 } 3163 } 3164 } 3165 else 3166 { 3167 index= 1; 3168 for (iter= vars1; iter.hasItem(); iter++, index++) 3169 { 3170 if (!fdivides (myGetVars (ii.getItem().factor()), iter.getItem())) 3171 { 3172 int index2= 1; 3173 for (iter2= leadingCoeffs2[lengthAeval2-1];iter2.hasItem();iter2++, 3174 index2++) 3175 { 3176 if (index2 == index) 3177 { 3178 tmp= power (ii.getItem().factor(), ii.getItem().exp()); 3179 iter2.getItem() /= tmp; 3180 A /= tmp; 3181 CFListIterator iter3= evaluation; 3182 for (int jj= A.level(); jj > 2; jj--, iter3++) 3183 tmp= tmp (iter3.getItem(), jj); 3184 if (!tmp.inCoeffDomain()) 3185 { 3186 int index3= 1; 3187 for (iter3= biFactors; iter3.hasItem(); iter3++, index3++) 3188 { 3189 if (index3 == index2) 3190 { 3191 iter3.getItem() /= tmp; 3192 iter3.getItem() /= Lc (iter3.getItem()); 3193 break; 3194 } 3195 } 3196 } 3197 } 3198 } 3199 } 3200 } 3201 } 3202 } 3260 LCHeuristic (A, LCmultiplier, biFactors, leadingCoeffs2, oldAeval, 3261 lengthAeval2, evaluation, oldBiFactors); 3203 3262 3204 3263 leadingCoeffs= leadingCoeffs2[lengthAeval2-1]; 3205 3264 for (int i= lengthAeval2-1; i > -1; i--) 3206 3265 leadingCoeffs2[i]= CFList(); 3207 prepareLeadingCoeffs (leadingCoeffs2,A.level(),leadingCoeffs, biFactors, 3208 evaluation); 3209 Aeval= evaluateAtEval (A, evaluation, 2); 3210 3211 hh= 1/Lc (Aeval.getFirst()); 3212 3213 for (CFListIterator i= Aeval; i.hasItem(); i++) 3214 i.getItem() *= hh; 3215 3216 A *= hh; 3266 prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(),leadingCoeffs, 3267 biFactors, evaluation); 3217 3268 3218 3269 if (!fdivides (LC (oldA,1),prod (leadingCoeffs2[lengthAeval2-1]))) … … 3283 3334 if (noOneToOne) 3284 3335 { 3285 3286 3336 if (!LCmultiplierIsConst && LCheuristic) 3287 3337 { -
factory/facFqFactorize.h
ra1da6f r65148c4 608 608 /// normalize precomputed leading coefficients such that leading coefficients 609 609 /// evaluated at @a evaluation in K^(n-2) equal the leading coeffs wrt 610 /// Variable(1) of bivariate factors 611 void 612 prepareLeadingCoeffs (CFList*& LCs, ///<[in,out] 610 /// Variable(1) of bivariate factors and change @a A and @a Aeval accordingly 611 void 612 prepareLeadingCoeffs (CFList*& LCs, ///<[in,out] 613 CanonicalForm& A, ///<[in,out] 614 CFList& Aeval, ///<[in,out] 613 615 int n, ///<[in] level of poly to be 614 616 ///< factored … … 684 686 ); 685 687 688 /// changes the second variable to be @a w and updates all relevant data 689 void 690 changeSecondVariable (CanonicalForm& A, ///<[in,out] a multivariate poly 691 CFList& biFactors, ///<[in,out] bivariate factors 692 CFList& evaluation, ///<[in,out] evaluation point 693 CFList*& oldAeval, ///<[in,out] old bivariate factors 694 ///< wrt. different second vars 695 int lengthAeval2, ///<[in] length of oldAeval 696 const CFList& uniFactors,///<[in] univariate factors 697 const Variable& w ///<[in] some variable 698 ); 699 700 /// distributes a divisor LCmultiplier of LC(A,1) on the bivariate factors and 701 /// the precomputed leading coefficients 702 void 703 distributeLCmultiplier (CanonicalForm& A, ///<[in,out] some poly 704 CFList& leadingCoeffs, ///<[in,out] leading 705 ///< coefficients 706 CFList& biFactors, ///<[in,out] bivariate 707 ///< factors 708 const CFList& evaluation, ///<[in] eval. point 709 const CanonicalForm& LCmultipler///<[in] multiplier 710 ); 711 712 /// heuristic to distribute @a LCmultiplier onto factors based on the variables 713 /// that occur in @a LCmultiplier and in the leading coeffs of bivariate factors 714 void 715 LCHeuristic (CanonicalForm& A, ///<[in,out] a poly 716 const CanonicalForm& LCmultiplier,///<[in,out] divisor of LC (A,1) 717 CFList& biFactors, ///<[in,out] bivariate factors 718 CFList*& leadingCoeffs, ///<[in,out] leading coeffs 719 const CFList* oldAeval, ///<[in] bivariate factors wrt. 720 ///< different second vars 721 int lengthAeval, ///<[in] length of oldAeval 722 const CFList& evaluation, ///<[in] evaluation point 723 const CFList& oldBiFactors ///<[in] bivariate factors 724 ///< without LCmultiplier 725 ///< distributed on them 726 ); 727 728 /// checks if prod(LCs)==LC (oldA,1) and if so divides elements of leadingCoeffs 729 /// by elements in contents, sets A to oldA and sets foundTrueMultiplier to true 730 void 731 LCHeuristicCheck (const CFList& LCs, ///<[in] leading coeffs computed 732 const CFList& contents, ///<[in] content of factors 733 CanonicalForm& A, ///<[in,out] oldA*LCmultiplier^m 734 const CanonicalForm& oldA,///<[in] some poly 735 CFList& leadingCoeffs, ///<[in,out] leading coefficients 736 bool& foundTrueMultiplier ///<[in,out] success? 737 ); 738 739 /// heuristic to distribute @a LCmultiplier onto factors based on the contents 740 /// of @a factors. @a factors are assumed to come from LucksWangSparseHeuristic. 741 /// If not successful @a contents will contain the content of each element of @a 742 /// factors and @a LCs will contain the LC of each element of @a factors divided 743 /// by its content 744 void 745 LCHeuristic2 (const CanonicalForm& LCmultiplier,///<[in] divisor of LC (A,1) 746 const CFList& factors, ///<[in] result of 747 ///< LucksWangSparseHeuristic 748 CFList& leadingCoeffs, ///<[in,out] leading coeffs 749 CFList& contents, ///<[in,out] content of factors 750 CFList& LCs, ///<[in,out] LC of factors 751 ///< divided by content of 752 ///< factors 753 bool& foundTrueMultiplier ///<[in,out] success? 754 ); 755 756 /// heuristic to remove @a LCmultiplier from a factor based on the contents 757 /// of @a factors. @a factors are assumed to come from LucksWangSparseHeuristic. 758 void 759 LCHeuristic3 (const CanonicalForm& LCmultiplier,///<[in] divisor of LC (A,1) 760 const CFList& factors, ///<[in] result of 761 ///< LucksWangSparseHeuristic 762 const CFList& oldBiFactors, ///<[in] bivariate factors 763 ///< without LCmultiplier 764 ///< distributed on them 765 const CFList& contents, ///<[in] content of factors 766 const CFList* oldAeval, ///<[in] bivariate factors wrt. 767 ///< different second vars 768 CanonicalForm& A, ///<[in,out] poly 769 CFList*& leadingCoeffs, ///<[in,out] leading coeffs 770 int lengthAeval, ///<[in] length of oldAeval 771 bool& foundMultiplier ///<[in,out] success? 772 ); 773 774 /// heuristic to remove factors of @a LCmultiplier from @a factors. 775 /// More precisely checks if elements of @a contents divide @a LCmultiplier. 776 /// Assumes LCHeuristic3 is run before it and was successful. 777 void 778 LCHeuristic4 (const CFList& oldBiFactors, ///<[in] bivariate factors 779 ///< without LCmultiplier 780 ///< distributed on them 781 const CFList* oldAeval, ///<[in] bivariate factors wrt. 782 ///< different second vars 783 const CFList& contents, ///<[in] content of factors 784 const CFList& factors, ///<[in] result of 785 ///< LucksWangSparseHeuristic 786 const CanonicalForm& testVars,///<[in] product of second vars that 787 ///< occur among oldAeval 788 int lengthAeval, ///<[in] length of oldAeval 789 CFList*& leadingCoeffs, ///<[in,out] leading coeffs 790 CanonicalForm& A, ///<[in,out] poly 791 CanonicalForm& LCmultiplier, ///<[in,out] divisor of LC (A,1) 792 bool& foundMultiplier ///<[in] success? 793 ); 794 686 795 #endif 687 796 /* FAC_FQ_FACTORIZE_H */ -
factory/facHensel.cc
ra1da6f r65148c4 918 918 M (j + 1, 1)= mulNTL (bufFactors[0] [j], bufFactors[1] [j], b); 919 919 CanonicalForm uIZeroJ; 920 if (j == 1) 921 { 922 if (degBuf0 > 0 && degBuf1 > 0) 923 uIZeroJ= mulNTL ((bufFactors[0] [0] + bufFactors[0] [j]), 924 (bufFactors[1] [0] + buf[1]), b) - M(1, 1) - M(j + 1, 1); 925 else if (degBuf0 > 0) 926 uIZeroJ= mulNTL (bufFactors[0] [j], bufFactors[1], b); 927 else if (degBuf1 > 0) 928 uIZeroJ= mulNTL (bufFactors[0], buf[1], b); 929 else 930 uIZeroJ= 0; 931 if (b.getp() != 0) 932 uIZeroJ= b (uIZeroJ); 933 Pi [0] += xToJ*uIZeroJ; 934 if (b.getp() != 0) 935 Pi [0]= b (Pi[0]); 936 } 920 921 if (degBuf0 > 0 && degBuf1 > 0) 922 uIZeroJ= mulNTL ((bufFactors[0] [0] + bufFactors[0] [j]), 923 (bufFactors[1] [0] + buf[1]), b) - M(1, 1) - M(j + 1, 1); 924 else if (degBuf0 > 0) 925 uIZeroJ= mulNTL (bufFactors[0] [j], bufFactors[1], b); 926 else if (degBuf1 > 0) 927 uIZeroJ= mulNTL (bufFactors[0], buf[1], b); 937 928 else 938 { 939 if (degBuf0 > 0 && degBuf1 > 0) 940 uIZeroJ= mulNTL ((bufFactors[0] [0] + bufFactors[0] [j]), 941 (bufFactors[1] [0] + buf[1]), b) - M(1, 1) - M(j + 1, 1); 942 else if (degBuf0 > 0) 943 uIZeroJ= mulNTL (bufFactors[0] [j], bufFactors[1], b); 944 else if (degBuf1 > 0) 945 uIZeroJ= mulNTL (bufFactors[0], buf[1], b); 946 else 947 uIZeroJ= 0; 948 if (b.getp() != 0) 949 uIZeroJ= b (uIZeroJ); 950 Pi [0] += xToJ*uIZeroJ; 951 if (b.getp() != 0) 952 Pi [0]= b (Pi[0]); 953 } 929 uIZeroJ= 0; 930 if (b.getp() != 0) 931 uIZeroJ= b (uIZeroJ); 932 Pi [0] += xToJ*uIZeroJ; 933 if (b.getp() != 0) 934 Pi [0]= b (Pi[0]); 935 954 936 CFArray tmp= CFArray (factors.length() - 1); 955 937 for (k= 0; k < factors.length() - 1; k++) … … 1445 1427 M (j + 1, 1)= mulMod (bufFactors[0] [j], bufFactors[1] [j], MOD); 1446 1428 CanonicalForm uIZeroJ; 1447 if (j == 1) 1448 { 1449 if (degBuf0 > 0 && degBuf1 > 0) 1450 uIZeroJ= mulMod ((bufFactors[0] [0] + bufFactors[0] [j]), 1429 1430 if (degBuf0 > 0 && degBuf1 > 0) 1431 uIZeroJ= mulMod ((bufFactors[0] [0] + bufFactors[0] [j]), 1451 1432 (bufFactors[1] [0] + buf[1]), MOD) - M(1, 1) - M(j + 1, 1); 1452 else if (degBuf0 > 0) 1453 uIZeroJ= mulMod (bufFactors[0] [j], bufFactors[1], MOD); 1454 else if (degBuf1 > 0) 1455 uIZeroJ= mulMod (bufFactors[0], buf[1], MOD); 1456 else 1457 uIZeroJ= 0; 1458 Pi [0] += xToJ*uIZeroJ; 1459 } 1433 else if (degBuf0 > 0) 1434 uIZeroJ= mulMod (bufFactors[0] [j], bufFactors[1], MOD); 1435 else if (degBuf1 > 0) 1436 uIZeroJ= mulMod (bufFactors[0], buf[1], MOD); 1460 1437 else 1461 { 1462 if (degBuf0 > 0 && degBuf1 > 0) 1463 uIZeroJ= mulMod ((bufFactors[0] [0] + bufFactors[0] [j]), 1464 (bufFactors[1] [0] + buf[1]), MOD) - M(1, 1) - M(j + 1, 1); 1465 else if (degBuf0 > 0) 1466 uIZeroJ= mulMod (bufFactors[0] [j], bufFactors[1], MOD); 1467 else if (degBuf1 > 0) 1468 uIZeroJ= mulMod (bufFactors[0], buf[1], MOD); 1469 else 1470 uIZeroJ= 0; 1471 Pi [0] += xToJ*uIZeroJ; 1472 } 1438 uIZeroJ= 0; 1439 Pi [0] += xToJ*uIZeroJ; 1473 1440 1474 1441 CFArray tmp= CFArray (factors.length() - 1); … … 1887 1854 uIZeroJ= mulNTL (uIZeroJ, bufFactors[l + 1]); 1888 1855 else if (degBuf > 0) 1889 uIZeroJ= mulNTL (Pi[l - 1], buf[ 1]);1856 uIZeroJ= mulNTL (Pi[l - 1], buf[l+1]); 1890 1857 else 1891 1858 uIZeroJ= 0; … … 2270 2237 uIZeroJ= mulMod (uIZeroJ, bufFactors[l + 1], MOD); 2271 2238 else if (degBuf > 0) 2272 uIZeroJ= mulMod (Pi[l - 1], buf[ 1], MOD);2239 uIZeroJ= mulMod (Pi[l - 1], buf[l + 1], MOD); 2273 2240 else 2274 2241 uIZeroJ= 0; -
factory/fac_ezgcd.cc
ra1da6f r65148c4 296 296 297 297 CFList evaluation; 298 long termEstimate= size (U); 298 299 for (int i= A.min(); i <= A.max(); i++) 300 { 301 if (!A[i].isZero()) 302 { 303 termEstimate *= degree (U,i)*2; 304 termEstimate /= 3; 305 } 299 306 evaluation.append (A [i]); 307 } 308 if (termEstimate/getNumVars(U) > 500) 309 return -1; 300 310 CFList UEval; 301 311 CanonicalForm shiftedU= myShift2Zero (U, UEval, evaluation); … … 425 435 int degF, degG, delta, t, count, maxeval; 426 436 REvaluation bt; 427 bool gcdfound = false;437 int gcdfound = 0; 428 438 Variable x = Variable(1); 429 439 count= 0; … … 470 480 if(F.mvar()==G.mvar()) 471 481 d*=gcd(F,G); 482 else 483 return N (d); 472 484 return N (d); 485 } 486 if ( F.isUnivariate()) 487 { 488 g= content (G,G.mvar()); 489 return N(d*gcd(F,g)); 490 } 491 if ( G.isUnivariate()) 492 { 493 f= content (F,F.mvar()); 494 return N(d*gcd(G,f)); 473 495 } 474 496
Note: See TracChangeset
for help on using the changeset viewer.