batch_gcd_factor.sf 645 B

1234567891011121314151617181920212223
  1. #!/usr/bin/ruby
  2. # Factorize a list of numbers for FactorDB, using factors of pseudoprimes.
  3. var nums = File(ARGV[0]).open_r.lines.map{.nums.last}.grep { defined(_) }.uniq
  4. var gcds = Math.batch_gcd(
  5. [
  6. #nums...,
  7. glob(
  8. "../pseudoprimes/oeis-pseudoprimes/*.txt"
  9. )\
  10. .grep { File(_).size / 1024**2 < 10 }\ # keep only files that have less than 10MB
  11. .map{ File(_).open_r.lines.map{.nums.last}.grep { defined(_) && (.len\\0 > 25) } }.flat...
  12. ].uniq.sort...
  13. ).uniq.sort
  14. for n in (nums) {
  15. var f = Math.gcd_factors(n, gcds).first(-1)
  16. f || next
  17. say "#{n} = #{f.join(' * ')}"
  18. }