many_primes.py

from sage.all import *
import argparse

# Implemented using https://doc.sagemath.org/html/en/reference/interfaces/sage/interfaces/ecm.html

def many_primes(n):

    ecm = ECM()
    factors = ecm.factor(n)
    return factors

def test():

    primes = []
    for i in range(30):
        p = random_prime(2**64)
        primes.append(p)

    # Sort the primes
    primes.sort()
    print("primes =", primes)

    N = 1
    for p in primes:
        N *= p

    print("N =", N)
    factors = many_primes(N)
    factors.sort()
    print("factors =", factors)

    test_correct = True
    for i in range(len(primes)):
        if primes[i] != factors[i]:
            test_correct = False

    print("Test correct:", test_correct)

if __name__ == "__main__":

    parser = argparse.ArgumentParser(description="Factor a known composite number with many primes")
    parser.add_argument("n", type=int, help="The number to factor")
    args = parser.parse_args()

    factors = many_primes(args.number)
    print("factors =", factors)