Changes between GMP-ECM 7.0.5 and 7.0.6: * added a generator for optimal Lucas chains for param=0 (see README and LucasChainGenerator/README) * added thread-safety to schoen_strass.c (contributed by Mark Geisert) (https://gitlab.inria.fr/zimmerma/ecm/-/issues/21863) * the option -I has been removed (https://gitlab.inria.fr/zimmerma/ecm/-/issues/21867) * fixed a bug when using -resume with param=0 and B1 > B1 in resume file (https://gitlab.inria.fr/zimmerma/ecm/-/issues/21866) Changes between GMP-ECM 7.0.4 and 7.0.5: * fixed a bug when input is a file with several numbers: the -param choice did depend on the first number * fixed cross-compiling issue to mingw32 (https://gitlab.inria.fr/zimmerma/ecm/-/issues/21836) * fixed issue with Apple Xcode 12 (https://gitlab.inria.fr/zimmerma/ecm/-/issues/21856) * fixed OpenMP error when compiling with clang (https://gitlab.inria.fr/zimmerma/ecm/-/issues/21857) Changes between GMP-ECM 7.0.3 and 7.0.4: * fixed a bug in mpres_pow: https://gforge.inria.fr/tracker/?func=detail&atid=623&aid=20712&group_id=135 * fixed a bug with P-1 or P+1 and small B2 * improved portability (OS X, Windows, Cygwin, non GNU ld) * fixed make longcheck with out-of-source build Changes between GMP-ECM 7.0.2 and GMP-ECM 7.0.3: * fixed compilation issue on powerpc64 Changes between GMP-ECM 7.0.1 and GMP-ECM 7.0.2: * fixed bug in P-1/P+1 stage 2 and -redc when -1/N mod R has less than n limbs Changes between GMP-ECM 7.0 and GMP-ECM 7.0.1: * fixed efficiency issue with divisors of 2^n+/-1 * allow for larger B1 values on Windows computers in batch mode * several fixes on Debian (FreeBSD, powerpc64) * fixed save files generated by gpu-ecm * fixed issue with gcc-5 (CC/CFLAGS from gmp.h were no longer used) * updated longlong.h file from GMP 6.1.0 * fixed some compiler warnings Changes between GMP-ECM 6.4.4 and GMP-ECM 7.0: * GMP-ECM is now thread-safe. In particular the "ecmfactor" binary can be called with say -t 17 to use 17 threads. * Added GPU code for Step 1 (command-line option -gpu). * Command-line option -param allows to choose the parametrization (valid values are 0, 1, 2, 3). Command-line option -sigma allows to choose the parameter. "-sigma i:s" is a shortcut to "-param i -sigma s". Use -param 0 to get historical Suyama parametrization. * The batch mode is now chosen with -param command-line option. The default parametrization depends on other command-line options. * For P-1 stage 2, by default the NTT code is always used. * Speedup in stage 2 with -no-ntt * New primality proving code with APRCL (contributed by David Cleaver) with --enable-aprcl (default=yes) * Removed some options that were unused or not tested (-n, -nn, -ve, -cofdec, -B2scale). * The configure --enable-shellcmd option was removed, and also the --enable-memory-debug configure option (now obsolete with valgrind). * The -b options was removed (breadth-first mode) * Improved source coverage (92.7% of source code lines) Changes between GMP-ECM 6.4.3 and GMP-ECM 6.4.4: * Fixed PowerPC64 assembly code with --enable-shared (thanks Leif Leonhardy) * Fix to deal with change of semantics of internal GMP functions in GMP 5.1 * Fixed small memory leak in non-NTT P-1 stage 2 * Fixed segfaults with large non-NTT P+-1 stage 2 * Removed defunct -t command line option Changes between GMP-ECM 6.4.2 and GMP-ECM 6.4.3: * Fixed bug reported by user "lorgix" on mersenneforum (http://www.mersenneforum.org/showpost.php?p=286385&postcount=280) * Use 64-bit value for random seed under Windows Changes between GMP-ECM 6.4.1 and GMP-ECM 6.4.2: * Corrected the copyright headers * Reduced memory usage in stage 1 with -batch={1,2} mode. * Fixed bug in modular reduction (could occur only for numbers larger than 386 digits on 64-bit computers and 193 digits on 32-bit computers). * Speedup in stage 2 with the NTT default mode Changes between GMP-ECM 6.4 and GMP-ECM 6.4.1: * GMP-ECM is now distributed under the GPL version 3 or later for the binary, and under the LGPL version 3 or later for the library * Fixed a speed regression with respect to GMP-ECM 6.3 https://sympa.inria.fr/sympa/arc/ecm-discuss/2012-02/msg00000.html * Fixed a bug with the -treefile option which had been present for a long time * Several fixes for the Visual Studio 2010 build * New experimental option -batch=2, and speedup for -batch (i.e., -batch=1) * New tuning mechanism, now --enable-asm-redc is always recommended * New configure option --enable-mulredc-svoboda, for input numbers whose low limbs is congruent to -1 * New tuning parameters for Intel Core i5 * New ecmbench utility Changes between GMP-ECM 6.3 and GMP-ECM 6.4: * Fixed configure problem with SSE2 (http://trac.sagemath.org/sage_trac/ticket/10252) * Fixed configure bug on 32-bit PowerPC (tried to use 64-bit assembly) https://gforge.inria.fr/tracker/index.php?func=detail&aid=10646 * Fixed dependencies from build directory https://gforge.inria.fr/tracker/index.php?func=detail&aid=10648 * Patch from David Cleaver to allow B1 >= 2^32 on machines where "unsigned long" has 32 bits only * Patch from David Cleaver to use GWNUM 26.6 on Windows x64 with MingW64/Msys * Improved conversion from mpz_t to residue number system in NTT code * Better asm code for AMD cpus * Use of GMP's mpn_mullo_n and mpn_redc_2 when available * New option -batch with faster Stage 1 (but smaller success probability) * Added Visual Studio 2010 build Changes between GMP-ECM 6.2.3 and GMP-ECM 6.3: * New assembly code for 64-bit PowerPC (thanks to Philip McLaughlin) * Allow several processes to write to the same -save file * More routines in new P+-1 stage 2 use multi-threading in OpenMP build * Fixed incompatibility with GMP 5.0.0 * Fixed several bugs, and now check return value from malloc() calls * Fixed linking of GMP which prevented successful builds under Darwin (and presumably other systems) * Allow use of x86_64 asm code under MinGW Changes between GMP-ECM 6.2.2 and GMP-ECM 6.2.3: * Fixed incompatibility with GMP 4.3.0 when testing version in configure * SSE2 asm code for Visual C added in stage 2 NTT code * Small improvement to x86_64 mulredc asm code, slight speedup on Core 2 * Fixed incorrect carry propagation in subquadratic REDC code which could lead to incorrect arithmetic in rare cases * Fixed memory leak with -v parameter when factor was found in ECM stage 1 * Fixed bug which caused only one ECM curve to be run in spite of -c parameter if input line did not end in newline * Assembler mulredc code enabled by default on x86_64 Changes between GMP-ECM 6.2.1 and GMP-ECM 6.2.2: * Updated build project files for Visual C by Brian Gladman, also adds missing NTT_GFP_TWIDDLE_DI[FT]_BREAKOVER defines in VC parameter file * Fixed uninitialised parameter to P-1 probability computation * In tune.c : fixed generation of NTT_GFP_TWIDDLE_DI[FT]_BREAKOVER values, avoid calling cputime() excessively often when timing short functions, fixed access to uninitialised memory * Fixed serious split infinitive in configure script (thanks Paul Leyland) * Removed unnecessary carry propagation in x86_64 mulredc code, slight speedup (thanks Philip McLaughlin) * Fixed non-portable PIC code in x86_64/redc.asm * Fixed problem with pattern matching host type names in configure.in * Converted binary constants in spv.c and ntt_gfp.c to hexadecimal, some assembler do not support binary constants Changes between GMP-ECM 6.2 and GMP-ECM 6.2.1: * Default B2 for new P-1 and P+1 stage 2 increased * Probabilities for finding factors with P-1 are now printed with -v * Fixed compilation problem on IA64, EV56, and ARM * Made threshold between recursive and iterative NTT tunable Changes between GMP-ECM 6.1.3 and GMP-ECM 6.2: * New stage 2 for P-1 and P+1, described in Montgomery and Kruppa, Improved Stage 2 to P+-1 Factoring Algorithms, in A. J. van der Poorten and A. Stein (Eds.), ANTS-VIII 2008, LNCS 5011, pp. 180-195. * Parallelization in the new P+-1 stage 2 (with --enable-openmp). * Optimizations to the NTT code by Jason S. Papadopoulos * Improved mulredc assembly code for Athlon64/Opteron * Improved modular reduction in the mpzmod range * Bugfix in P+1 stage 2 which caused incorrect initialisation if Brent-Suyama polynomial had degree > 1 and i0 was negative (occurs only with non-standard parameters) * Bugfix in generation of Lucas chains for P+1 and ECM, causing some stage 1 primes close to 2^32 to be processed incorrectly on 32 bit systems * Added build project for VC++ by Brian Gladman * File ecm.h changed from GPL to LGPL: the fact it was under GPL was an unvoluntary mistake, which has the consequence that applications linking with libecm for version < 6.2 should be under GPL too. * Fixed a regression introduced in 6.1.1: the default arithmetic (NTT) for stage 2 was slower for large inputs. Now defaults to -no-ntt for input numbers >30 machine words. Changes between GMP-ECM 6.1.2 and GMP-ECM 6.1.3: * fixed incorrect computation of memory use in stage 2, especially for machines that use Kronecker-Schoenhage multiplication even for large degrees, such as Core 2. * fixed -B2scale option whose value hadn't been passed to the factoring routines * fixed default B2min for P-1, which could be truncated on 32 bit machines, causing stage 2 to take a little longer than necessary * fixed bug for modular multiplication modulo Fermat numbers 2^2^n+1, where a result of 2^2^n would be truncated to 0. Changes between GMP-ECM 6.1.1 and GMP-ECM 6.1.2: * changed copyright header from sp.h, to recognize the FSF for parts inspired or taken from gmp-impl.h. Changes between GMP-ECM 6.0.1 and GMP-ECM 6.1: * new assembly code contributed by Pierrick Gaudry for combined mul/redc * new Number Theoretic Transform code contributed by Dave Newman for step 2 * new signal handling and corresponding save files for step 1 * now prints peak memory allocation with -v * improved and simplified tuning * command-line options: added -idlecmd -no-ntt -prpcmd -stage1time -maxmem, removed -prp* * new configure options --enable-asm-redc, --with-gwnum * new exit status codes of ecm program * new interface to George Woltman's GWNUM library (see INSTALL) * chosen stage 2 bound is now printed right away * fixed minor memory leak in mpmod.c/isbase2 * fixed invalid Found input number N reported on some numbers * fixed serious P+1 bug on 64-bit architectures with B1 > 2^32 * fixed wrong detection of divisors of 2^n+1 or 2^n-1 * fixed memory leaks Changes between GMP-ECM 6.0 and GMP-ECM 6.0.1: * now checks for availability of snprintf() during configure * fixed linking problems with tune and tune2 on PowerPC G5 * fixed segfault in rho.c * fixed main()'s B2 value being overwritten by callees * allow both \r and \n for newline (for Apple computers) * made files compile under Visual C * fixed bug in listz.c that could leave undefined data * fixed the -B2scale option * fixed small error in printed B2' value (with -v) * added Windows section to INSTALL * small corrections to ecm.xml and ecm.1 * added curve counter in loop mode again * fixed segfault when a non-number was in place of B2 on command line * worked around problem with MinGW/Wine scanf() (value 1 too high for %n) * free rhotable memory at end of stage 2 * replaced GSL's dilog_series() in rho.c due to licensing (GPL vs. LGPL) Changes between GMP-ECM 5.0.3 and GMP-ECM 6.0: * use of the autotools (configure/make) * there is now a documentation in "man" format (ecm.1) * added a set of -prp* command line switches which will use an external program to perform prp testing of candidate and factors. When the numbers get large, GMP becomes very non-optimal in PRP testing. An external program, such as OpenPFGW, can be much faster than the GMP. (New code from Phil Carmody) * new parser for symbolic input * added hex number input into the expression parser. This was needed due to save files from Prime95 being output in hex. ecm was not resuming these. * added some porting code so ecm builds under VC6. VC6 builds an ecm that is is about 1% to 3% faster than the MinGW build (which is about 1% to 3% faster than a Cygwin build) * quiet mode (-q) now prints on stdout all factors found on the same line: f1 f2 ... fk ccc where ccc is the remaining composite (contributed by Laurent Fousse). Example: $ echo 438573459834757 | ./ecm -sigma 6 -q 1e2 2166151 202466707 * special code for Fermat numbers, which improves both steps, example for F12: GMP-ECM 5.0.3 [powered by GMP 4.1.4] [ECM] Input number has 1187 digits Using B1=100000, B2=31565866, polynomial x^2, sigma=4155936925 Step 1 took 27157ms Step 2 took 20830ms GMP-ECM 5.2.0 [powered by GMP 4.1.4] [ECM] Input number has 1187 digits Using B1=100000, B2=31565866, polynomial x^2, sigma=535125396 Step 1 took 24264ms Step 2 took 6605ms * speed improvement in step 2, especially for large B2 (here with the c155 in the GMP-ECM sources), using Kronecker/Schonhage multiplication: GMP-ECM 5.0.3 [powered by GMP 4.1.4] [ECM] Using B1=3000000, B2=4016636514, polynomial Dickson(12), sigma=2383768044 Step 1 took 62305ms Step 2 took 45322ms GMP-ECM 5.2.0 [powered by GMP 4.1.4] [ECM] Using B1=3000000, B2=4016636514, polynomial Dickson(12), sigma=3595368442 Step 1 took 61824ms Step 2 took 32989ms * Brent-Suyama's extension now works for P+1 too * trial division is available (option -t n) * new options -n (low priority) and -nn (idle priority) * the looping mode (-c n) now continues to try to factor the composite when a factor is found (use -one to stop) * new option -ve n to display only inputs of <= n characters (looping mode) * new option -treefile which stores product tree of F on disk to save memory * generation of roots use double sieve idea, increases B2 for given k, dF * generation of roots for ECM rewritten to reduce number of extgcds Changes between GMP-ECM 5.0 and GMP-ECM 5.0.1: * fixed bug when B1 or B2min is too large, and an overflow occurs in step 2, making the computations incorrect. The new limit for B1 or B2min is now around 2^53, and an error occurs when this limit is passed. * fixed problem with save lines incorrectly written when both sigma and A are given with -save. * fixed efficiency problem with -pm1: for B1 > 1e6, use -redc or -mpz_mod by default.