
def pause():
    input("On continue ?...\n")


def int_prod():
    print("On génère des grands entiers aléatoires.")
    x = ZZ.random_element(10^(50*10^6+1))
    y = ZZ.random_element(10^(50*10^6+1))
    chiffres_x = int(log(x, 10))
    chiffres_y = int(log(y, 10))
    print(f"x a {chiffres_x:,} chiffres, et y a {chiffres_y:,} chiffres")
    print("Calcul du produit x*y")
    z = x*y
    print("Done")
    return


def big_fact():
    num = 5*10^6
    print(f"On calcule factorielle de {num:,}")
    z = factorial(num)
    print("Done")
    return

def int_factor():
    x = ZZ.random_element(10^(61))
    print(f"Factorisation d'un nombre de {int(log(x, 10)):,} chiffres.")
    z = factor(x)

print("*************************")
print("Produit de Grands Entiers")
print("*************************")
int_prod()
print("\n\n")
pause()
print("\n\n")

print("*************************")
print("       Factorielle       ")
print("*************************")
big_fact()
pause()
print("\n\n")



print("*************************")
print("       Factorisation     ")
print("*************************")
int_factor()
pause()
print("\n\n")




print("*************************")
print("  Polynômes gros Corps   ")
print("*************************")
print("\n\n")


p = next_prime(2^32)
print(f"p est un premier de {int(log(p, 2))} bits")
K = GF(p)

A.<X> = K[]

def poly_prod():
    print("Génère des polynômes aléatoires")
    P = A.random_element(10^6)
    Q = A.random_element(10^6)
    print(f"P est un polynôme de Fp[X] et de degré {P.degree():,}.")
    print(f"Q est un polynôme de Fp[X] et de degré {Q.degree():,}.")
    print("Calcul du produit PQ")
    Z=P*Q
    print("Done")

def poly_factor():
    print("Génère des polynômes aléatoires")
    P = A.random_element(1000)
    print(f"P est un polynôme de Fp[X] et de degré {P.degree():,}.")
    print("Calcul de la factorisation")
    F=P.factor()
    print("Done")

print("*************************")
print("Produit de Grands Polynomes")
print("*************************")
poly_prod()
pause()
print("\n\n")


print("*************************")
print("       Factorisation     ")
print("*************************")
poly_factor()
print("\n\n")

