1comment factorizer test file; 2 3 4array a(20); 5 6 7 8factorize(x**2-1); 9 10 11{{x + 1,1},{x - 1,1}} 12 % To make sure factorizer is loaded. 13 14algebraic procedure test(prob,nfac); 15 begin integer m; scalar p,q,r; 16 scalar basetime; 17 p := for i:=1:nfac product a(i); 18 Write "Problem number ",prob; 19 symbolic (basetime := time()); 20 r := factorize p; 21 symbolic (basetime := time() - basetime); 22 q := for each j in r product first j^second j; 23 m := for each j in r sum second j; 24 if m=nfac and p=q then return ok; 25 write "This example failed:"; 26 write r 27 end; 28 29 30test 31 32 33% Wang test case 1; 34 35a(1) := x*y+z+10$ 36 37 38a(2) := x*z+y+30$ 39 40 41a(3) := x+y*z+20$ 42 43 44test(1,3); 45 46 47Problem number 1 48 49ok 50 51 52% Wang test case 2; 53 54a(1) := x**3*z+x**3*y+z-11$ 55 56 57a(2) := x**2*z**2+x**2*y**2+y+90$ 58 59 60test(2,2); 61 62 63Problem number 2 64 65ok 66 67 68 69% Wang test case 3; 70 71a(1) := x**3*y**2+x*z**4+x+z$ 72 73 74a(2) := x**3+x*y*z+y**2+y*z**3$ 75 76 77test(3,2); 78 79 80Problem number 3 81 82ok 83 84 85 86% Wang test case 4; 87 88a(1) := x**2*z+y**4*z**2+5$ 89 90 91a(2) := x*y**3+z**2$ 92 93 94a(3) := -x**3*y+z**2+3$ 95 96 97a(4) := x**3*y**4+z**2$ 98 99 100test(4,4); 101 102 103Problem number 4 104 105ok 106 107 108 109% Wang test case 5; 110 111a(1) := 3*u**2*x**3*y**4*z+x*z**2+y**2*z**2+19*y**2$ 112 113 114a(2) := u**2*y**4*z**2+x**2*z+5$ 115 116 117a(3) := u**2+x**3*y**4+z**2$ 118 119 120test(5,3); 121 122 123Problem number 5 124 125ok 126 127 128 129% Wang test case 6; 130 131a(1) := w**4*x**5*y**6-w**4*z**3+w**2*x**3*y+x*y**2*z**2$ 132 133 134a(2) := w**4*z**6-w**3*x**3*y-w**2*x**2*y**2*z**2+x**5*z 135 -x**4*y**2+y**2*z**3$ 136 137 138a(3) := -x**5*z**3+x**2*y**3+y*z$ 139 140 141test(6,3); 142 143 144Problem number 6 145 146ok 147 148 149 150% Wang test case 7; 151 152a(1) := x+y+z-2$ 153 154 155a(2) := x+y+z-2$ 156 157 158a(3) := x+y+z-3$ 159 160 161a(4) := x+y+z-3$ 162 163 164a(5) := x+y+z-3$ 165 166 167test(7,5); 168 169 170Problem number 7 171 172ok 173 174 175 176% Wang test case 8; 177 178a(1) := -z**31-w**12*z**20+y**18-y**14+x**2*y**2+x**21+w**2$ 179 180 181a(2) := -15*y**2*z**16+29*w**4*x**12*z**3+21*x**3*z**2+3*w**15*y**20$ 182 183 184 185% Commented out, since it can take a long time. 186 187% TEST(8,2); 188 189 190 191% Wang test case 9; 192 193a(1) := 18*u**2*w**3*x*z**2+10*u**2*w*x*y**3+15*u*z**2+6*w**2*y**3*z**2$ 194 195 196a(2) := x$ 197 198 199a(3) := 25*u**2*w**3*y*z**4+32*u**2*w**4*y**4*z**3- 200 48*u**2*x**2*y**3*z**3-2*u**2*w*x**2*y**2+44*u*w*x*y**4*z**4- 201 8*u*w*x**3*z**4+4*w**2*x+11*w**2*x**3*y+12*y**3*z**2$ 202 203 204a(4) := z$ 205 206 207a(5) := z$ 208 209 210a(6) := u$ 211 212 213a(7) := u$ 214 215 216a(8) := u$ 217 218 219a(9) := u$ 220 221 222test(9,9); 223 224 225Problem number 9 226 227ok 228 229 230 231 232% Wang test case 10; 233 234a(1) := 31*u**2*x*z+35*w**2*y**2+40*w*x**2+6*x*y$ 235 236 237a(2) := 42*u**2*w**2*y**2+47*u**2*w**2*z+22*u**2*w**2+9*u**2*w*x**2+21 238 *u**2*w*x*y*z+37*u**2*y**2*z+u**2*w**2*x*y**2*z**2+8*u**2*w**2 239 *z**2+24*u**2*w*x*y**2*z**2+24*u**2*x**2*y*z**2+12*u**2*x*y**2 240 *z**2+13*u*w**2*x**2*y**2+27*u*w**2*x**2*y+39*u*w*x*z+43*u* 241 x**2*y+44*u*w**2* z**2+37*w**2*x*y+29*w**2*y**2+31*w**2*y*z**2 242 +12*w*x**2*y*z+43*w*x*y*z**2+22*x*y**2+23*x*y*z+24*x*y+41*y**2 243 *z$ 244 245 246test(10,2); 247 248 249Problem number 10 250 251ok 252 253 254 255 256% Wang test case 11; 257 258a(1) := -36*u**2*w**3*x*y*z**3-31*u**2*w**3*y**2+20*u**2*w**2*x**2*y**2 259 *z**2-36*u**2*w*x*y**3*z+46*u**2*w*x+9*u**2*y**2-36*u*w**2*y**3 260 +9*u*w*y**3-5*u*w*x**2*y**3+48*u*w*x**3*y**2*z+23*u*w*x**3*y**2 261 -43*u*x**3*y**3*z**3-46*u*x**3*y**2+29*w**3*x*y**3*z**2- 262 14*w**3*x**3*y**3*z**2-45*x**3-8*x*y**2$ 263 264 265a(2) := 13*u**3*w**2*x*y*z**3-4*u*x*y**2-w**3*z**3-47*x*y$ 266 267 268a(3) := x$ 269 270 271a(4) := y$ 272 273 274test(11,4); 275 276 277Problem number 11 278 279ok 280 281 282 283 284 285% Wang test case 12; 286a(1) := x+y+z-3$ 287 288 289a(2) := x+y+z-3$ 290 291 292a(3) := x+y+z-3$ 293 294 295test(12,3); 296 297 298Problem number 12 299 300ok 301 302 303 304 305 306% Wang test case 13; 307 308a(1) := 2*w*z+45*x**3-9*y**3-y**2+3*z**3$ 309 310 311a(2) := w**2*z**3-w**2+47*x*y$ 312 313 314test(13,2); 315 316 317Problem number 13 318 319ok 320 321 322 323 324 325% Wang test case 14; 326 327a(1) := 18*x**4*y**5+41*x**4*y**2-37*x**4+26*x**3*y**4+38*x**2*y**4-29* 328 x**2*y**3-22*y**5$ 329 330 331a(2) := 33*x**5*y**6-22*x**4+35*x**3*y+11*y**2$ 332 333 334test(14,2); 335 336 337Problem number 14 338 339ok 340 341 342 343 344 345% Wang test case 15; 346 347a(1) := 12*w**2*x*y*z**3-w**2*z**3+w**2-29*x-3*x*y**2$ 348 349 350a(2) := 14*w**2*y**2+2*w*z+18*x**3*y-8*x*y**2-y**2+3*z**3$ 351 352 353a(3) := z$ 354 355 356a(4) := z$ 357 358 359a(5) := y$ 360 361 362a(6) := y$ 363 364 365a(7) := y$ 366 367 368a(8) := x$ 369 370 371a(9) := x$ 372 373 374a(10) := x$ 375 376 377a(11) := x$ 378 379 380a(12) := x$ 381 382 383a(13) := x$ 384 385 386test(15,13); 387 388 389Problem number 15 390 391ok 392 393 394 395% Test 16 - the 40th degree polynomial that comes from 396% SIGSAM problem number 7; 397 398a(1) := 8192*y**10+20480*y**9+58368*y**8-161792*y**7+198656*y**6+ 399 199680*y**5-414848*y**4-4160*y**3+171816*y**2-48556*y+469$ 400 401 402a(2) := 8192*y**10+12288*y**9+66560*y**8-22528*y**7-138240*y**6+ 403 572928*y**5-90496*y**4-356032*y**3+113032*y**2+23420*y-8179$ 404 405 406a(3) := 4096*y**10+8192*y**9+1600*y**8-20608*y**7+20032*y**6+87360*y**5- 407 105904*y**4+18544*y**3+11888*y**2-3416*y+1$ 408 409 410a(4) := 4096*y**10+8192*y**9-3008*y**8-30848*y**7+21056*y**6+146496* 411 y**5-221360*y**4+1232*y**3+144464*y**2-78488*y+11993$ 412 413 414test(16,4); 415 416 417Problem number 16 418 419ok 420 421 422% Test 17 - taken from Erich Kaltofen's thesis. This polynomial 423% splits mod all possible primes p; 424 425a(1) := x**25-25*x**20-3500*x**15-57500*x**10+21875*x**5-3125$ 426 427 428test(17,1); 429 430 431Problem number 17 432 433ok 434 435 436% Test 18 - another 'hard-to-factorize' univariate; 437 438a(1) := x**18+9*x**17+45*x**16+126*x**15+189*x**14+27*x**13- 439 540*x**12-1215*x**11+1377*x**10+15444*x**9+46899*x**8+ 440 90153*x**7+133893*x**6+125388*x**5+29160*x**4- 441 32076*x**3+26244*x**2-8748*x+2916$ 442 443 444test(18,1); 445 446 447Problem number 18 448 449ok 450 451 452% Test 19 - another example chosen to lead to false splits mod p; 453 454a(1) := x**16+4*x**12-16*x**11+80*x**9+2*x**8+160*x**7+ 455 128*x**6-160*x**5+28*x**4-48*x**3+128*x**2-16*x+1$ 456 457 458a(2) := x**16+4*x**12+16*x**11-80*x**9+2*x**8-160*x**7+ 459 128*x**6+160*x**5+28*x**4+48*x**3+128*x**2+16*x+1$ 460 461 462test(19,2); 463 464 465Problem number 19 466 467ok 468 469 470 471% End of all tests; 472 473 474end; 475 476Tested on x86_64-pc-windows CSL 477Time (counter 1): 31 ms 478 479End of Lisp run after 0.03+0.06 seconds 480real 0.25 481user 0.04 482sys 0.01 483