To access to the source code to some function or method, just use ??
:
sage: factor??
So, you can see that this function transforms the entry into a Sage integer and calls the factor
method, which can be inspected as follows:
sage: a = ZZ(2)
sage: a.factor??
You can see that Sage does a few sanity checks and then calls some optimized library. The default one is pari
, but it is possible to use the algorithm
option to select another library, e.g. ecm
or qsieve
.
So, if you want to see the details of the algorithm that is used by default in Sage, you need to look at the pari
source code.
That said, a quick and dirty benchmark (using a few %timeit
on random integers) seems to prove than pari
is not slower than ecm
, the following code:
sage: G = Graphics()
sage: for i in range(300):
....: a = randint(2^i,2^(i+1))
....: p = %timeit -o factor(a, algorithm='pari')
....: e = %timeit -o factor(a, algorithm='ecm')
....: G += point((i, p.best / e.best))
leads to the following picture:
As you can see, pari
and ecm
behave identically for integers up to 40 bits, then, apart for some integers, pari
is faster that ecm
. As explained in the doc, ecm
is faster for integers whith some small prime factors. So, it could be interesting to understand why the integers you are studying are much faster factorized by ecm
than pari
.