📄 bugfixes and updates to calc.htm
字号:
<TT>nfunc.c</TT>. (I had freed W a few lines too soon!) MSDOS version not yet
fixed.
<LI>29th June 1999. Added the choice of finding <EM>all</EM> shortest
solutions to <TT>axb()</TT>.
<LI>17th May 1999. Added <TT>power_cubicm()</TT> ( the kth power of (X,Y) on
an elliptic curve over Z<SUB>p</SUB>), <TT>order_cubicr()</TT> and
<TT>order_cubicm()</TT>, which find the order of a point P on an elliptic
curve over the rationals and Z<SUB>p</SUB>, respectively. The latter is not
sophisticated and simply tests each iterate kP for k=2,... calc.exe has still
not been updated since 4th Feb.
<LI>21st March 1999. Removed a bug at the end of collatz.c. I had freed the
arrays m[] by carelessly first freeing the pointer to m and then the actual
m[i]!. Similarly for X[]. (The bug was passed by solaris, but linux was
unforgiving and dumped a core.)
<LI>15th March 1999. Added <TT>cycle()</TT> a cycle finding program for the
generalised collatz function. (see <A
href="http://www.numbertheory.org/pdfs/survey.pdf">survey</A> (pdf)).
<LI>4th February 1999. Added some hidden stuff on my gcd research for use by
fellow researchers, but of no interest to the average calc user.
<LI>20th January 1999. Added a shortest lattice vector program <A
href="http://www.numbertheory.org/calc/krm_calc.html#[42]"><TT>slv</TT></A>().
<LI>19th January 1999. cosmetic changes to the output of <TT>fp</TT>() and
<TT>inhomfp</TT>().
<LI>18th January 1999. Updated calc.tar.gz and calc.exe.gz. I improved
functions <TT>egcd</TT>(), <TT>lllgcd</TT>() and <TT>lllgcd0</TT>(), making it
easier to get a complete list of all shortest multipliers. I also added an
option to <TT>factor</TT>(n) whereby one can enter the number of elliptic
curves used. I removed the function short() as it is no longer needed.
<LI>18th November 1998. Updated calc.tar.gz. Fixed a bug in i5m.c in FFM, line
763. The elements c[i] may be ≥ 2<SUP>16</SUP>, so SHIFTLB() cannot be used.
In any case I don't use FFM as my implementation seems slow. Anyone who wishes
to use it should uncomment the relevant code in MULTI() in i1.c. Also I am
unable to free the temporary arrays B and C in FFT because of the way the
recursion acts; consequently there is a buildup of nettbytes. Any suggestions
on this score are welcome.<BR>
<LI>4th January 1999. Now allow the user to enter arbitrary m1 and n1, as
mentioned previously.
<LI>30th December 1998. Realized I'd forgotten to warn users of LLL-based
programs that m1 and n1 are less than 2<SUP>16</SUP>. I will render this
warning unnecessary in the near future. My misuse of this in <TT>lllgcd</TT>()
provided a counter-example in paper HMM, with m1/n1=100001/400000, which was
in fact not a counter-example after all. (100001>655536.)
<LI>27th November 1998. The above bug seems to disappear when I compile with
the -O2 option instead of -O3.
<LI>21st November 1998. On factorizing (10<SUP>65</SUP>-1)/9, calc hung in
mpqsieve.c. This turned out to be due to not observing that 100000 is not less
than 2<SUP>16</SUP>. This caused a problem on line 116 with INT0_, which is
solved by introducing srange=CHANGE(SRANGE) and then using INT0 instead of
INT0_. There is one bug which continues to elude me. When I factorize numbers
of greater than 50 digits invoking MPQS1, while the factoring processs runs to
completion, one cannot always quit gracefully and also cannot continue using
calc. Thus one has to kill calc on a UNIX machine, for example. This is
unsatisfactory. The problem is clearly to do with freeing and I had hoped the
error lay in the 1000000 bug discovered above. But apparently not. The code is
so complicated and the bug only manifests itself after 3 hours running on an
Ultra Sparc machine that it seems impossible at the moment for me to detect.
If any enthusiast out there has any ideas, please let me know. One example
where I think it hung was in factorising the 65 digit prime formed from 64 1's
with a 4 in the middle.
<LI>20th August 1998. removed the changes just made. Did make changes to
nfunc.c, i9.c, fun.h, as regards SMITHI and SMITHI1.
<LI>15th August 1998. Updated calc.tar.gz, because of introduction of verbose
mode in SMITH() in nfunc.c and i9.c. (Changes made to fun.h well.)
<LI>9th August 1998. Fixed a small bug in lllhermi.c, where lines 38-39 should
have been part of the body of the <TT>if(!keith97)</TT>. Also updated
calc.exe.gz.
<LI>6th August 1998. Fixed a small bug in axb(), whereby -X was returned
instead of X at times.
<LI>5th August 1998. Added a new function <TT>axb</TT>(), which solves the
linear system AX=B, where A,X,B have integer coefficients.
<LI>19th June 1998. Updated calc.exe.gz.
<LI>10th June 1998. Deleted lines 468-469 of elliptic.c, (ie, FREEMPI(P); and
FREEMPI(tmp); to avoid double freeing. Also changed j > 100 to j > 5 at
line 374. Also made a slight improvement to BRENT_POLLARD as regards
increasing a. calc.exe will be similarly updated soon.
<LI>13th May 1998. Updated calc.exe.gz.
<LI>9th May 1998. The only change being in mpqsieve.c, line 75, where I now
use FBASE = 3000; SRANGE = 180000; TOLERANCE = 22; This enabled me to
factorise 10<SUP>103</SUP>+1 overnight, the stumbling block hitherto being a
61 digit number.<BR>10<SUP>103</SUP>+1=
11*1237*44092859*984385009*102860539*612053256358933*<BR>182725114866521155647161*1471865453993855302660887614137521979
<LI>3rd March 1998. Updated calc.exe.gz in case my absentmindedness had
extended to calc.exe.
<LI>26th February 1998. I had absentmindedly not updated all the relevant
source files on 10th February. This has been fixed and calc.tar.gz updated.
<LI>11th February 1998. Updated calc.exe.gz.
<LI>10th February 1998. Rewrote <TT>POLLARD()</TT>. Removed segmentation error
and hanging problems arising from returning (MPI *)NULL from various functions
such as <TT>POLLARD</TT>, by altering parse.y and symbol.c at a few places,
not using <TT>FREEMPI(N)</TT> and <TT>COPYI(N)</TT> when N =
NULL.<BR><TT>pollard()</TT> and <TT>perfectpower</TT> added to list of defined
functions.<BR>
<LI>5th February 1998. Removed the array R[1280] from inside
<TT>EFACTOR()</TT> and placed it in a separate file primepowers.h. This now
makes elliptic.o compile much quicker.<BR>Also created a new function
<TT>elliptic(n,m,p)</TT> to factor n using the elliptic curve method.<BR>
<LI>2nd February 1998. Updated calc.exe.gz.
<LI>29th January 1998. Alex Balfour pointed out that factoring
10<SUP>100</SUP>+1 gave rise to rubbish. The cause turned out to be five
global arrays Q_[50], Q[50]; Q_PRIME[50]; K_[50], K[50] in
primes1.c.<BR>Replacing 50 by 100 solves the problem. This bug will be fixed
soon. I have also increased the Brent-Pollard step number from 2048 to 8192.
<LI>19th December 1997. I changed <TT>lagrange(a,n,m)</TT> to
<TT>lagrange(a,&aa[],n,m)</TT>. Also changed
<TT>convergents(a,n,&p,&q)</TT> to
<TT>convergents(a,&p[],&q[],n)</TT>. Also changed the meaning of n in
<TT>euclid(a,b,&c[],&n)</TT>, so as to be consistent with its usage in
convergents and lagrange.
<LI>18th December 1997. Also at the request of Edward Brisse, I added
<TT>lagrange(a,n,m)</TT>.
<LI>15th December 1997. At the request of Edward Brisse, I added
<TT>euclid(a,b,&c[],&n)</TT> and
<TT>convergents(a,n,&p,&q)</TT>.
<LI>4th December 1997. Changed <TT>collatz(x)</TT> to <TT>collatz(x,e)</TT>
and <TT>pell(d,&x,&y)</TT> to <TT>pell(d,e,&x,&y)</TT>, so
that iterates and partial quotients (respectively) are printed iff e is non
zero.
<LI>2nd December 1997. Oops - I somehow did not comment out the call to ffm
inthe MSDOS version of calc, as stated on 30th July 1997.
<LI>10th October 1997. Updated the MSDOS executable.
<LI>9th October 1997. Oops! I noticed I had absentmindedly left some print
statements in lllgcd.c in <TT>LLLGCD()</TT> lines 89-123 which only pertained
to the gcd of 3 integers, causing a problem in verbose mode for other than 3
integers. Fixed the source and the SUN executable.
<LI>24th September 1997. Upgraded the SUN executable and file primes1.c by
adding <TT>PERFECT_POWER(N)</TT>. This is employed in <TT>BIG_FACTOR(N)</TT>
to return X if N=X<SUP>p</SUP>. A corresponding declaration was added to
fun.h. (Many thanks to Lew Baxter for pointing out that calc was not factoring
a perfect power.)
<LI>30th July 1997. Upgraded the SUN and MSDOS executables on alphasun as the
Fast Fourier Transform has a subtle bug. Consequently multiplication of very
large numbers is now done using the brute force method.
<LI>8th March 1997. Changed <TT>lllhermite1()</TT> to <TT>lllhermite()</TT>.
This is the current LLL-based Hermite normal form algorithm as described off
my homepage via notes.html.
<LI>27th February 1997. Replaced the previous LLL based Hermite normal form
algorithm in SUN version on alphasun by an aesthetically more satisfying
version.
<LI>20th February 1997. Included LLL based Hermite normal form algorithm in
SUN version on alphasun.
<LI>7th February 1997. Added a <A
href="http://www.numbertheory.org/calc/calc_doc.html">list of CALC
functions</A> that a programmer might wish to use.
<LI>18th September 1996. Modified <TT>sgcd()</TT> to <TT>sgcd(N)</TT> in
private version
<LI>23rd April 1996. <TT>gcda(x,n)</TT> was actually calculating the lcm. I
also fixed a serious corruption of data was occurring in some functions using
<TT>FACTOR()</TT> such as <TT>orderm()</TT> and <TT>lprimroot()</TT>. <BR>(I
was freeing stuff that had already been freed.)
<LI>9th February 1996. Updated Sun version at alphasun (runs faster-compiled
with the O2 option.
<LI>7th December 1995. Updated MSDOS version at alphasun.<BR>Improved
<TT>BRENT_POLLARD()</TT> doing something I should have done initially - ie.
only computed gcd's of every accumulated 10th product.<BR>Also now bring in
the elliptic curve algorithm after 65 digits.
<LI>6th December 1995. Removed a bug in jacobi(n,m) which only came into
effect when n < 0.
<LI>5th November 1995: Removed a small error in <TT>fund(d)</TT> when d=t^2+1,
t odd. Also removed a small bug in <TT>pell()</TT> resulting from using the
same name pell in init.c for two functions.
<LI>10th October 1995: Added <TT>addcubicr()</TT> and <TT>powercubicr()</TT>.
<LI>23rd July 1995: I fixed a bug in improvep() which only came into effect if
rank(A)=number of rows of A.
<LI>11th June 1995: I noticed <TT>calc</TT> was not factoring 2^135+1- a
trivial example. I increased the range of Brent-Pollard and the factor base in
MPQS for numbers of < 20 digits. I also added an elliptic curve
factorization algorithm in case MPQS yields nothing.
<LI>28th May 1995: Removed a small error in <TT>fund(d)</TT> when d=t^2+4.
</LI></UL></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -