Factoring Very Large Numbers