Looks like I have just been unlucky in finding this example then.
Something about how I implemented the gaussian elimination causes it to crash when i have a duplicate. It is probably something to do with say I have a relation set of {1,2} and {2,3} multiplying them together I get {1,3}. In this case I multiple {1} and {1} and get {} The empty relation fails when my code tries to do the sqrt on it.
An oddity I have noticed is that I can't sieve the full way in the negative direction before (a*x+b) becomes negative. I can only sieve a range of M/sqrt(2) on the negative side rather than the full interval of M in both directions. Considering I used the fact that I plan to sieve M in both directions in calculating the optimum value of A=sqrt(2N)/M should I change my reasoning for the size of A? Is there something I am missing?
This has been an interesting exercise. It can now factor 75 digit numbers in ~40 minutes. 80 digits crashed in the sqrt stage(after 2.5 hours of running). I suspect it is quite possibly something to do with the homegrown multiprecision library I am using not being planned for so large numbers.
|