Beispiel #1
0
def test_potencia():
    from utils import potencia_modular_eficient

    size = []
    times = []

    # Fixem el valor de l'exponent a un nombre de 100 dígits
    a = generateRandomValue(10)

    i = 1
    while i < 300: 

        # Generem nombre aleatori amb llargada i
        
        base = generateRandomValue(i)
        p = generateRandomValue(i)
        print("Processant operacio -> " + str(base) + "^" + str(a) + "(mod " + str(p) + ")")
        # Generem una variable on hi desem el codi que executarem per poder calcular el temps. 
        start = time.time()
        potencia_modular_eficient(base, a, p)
        elapsed_time = time.time() - start

        size.append(i)
        times.append(elapsed_time)

        i += 1

    plt.plot(size, times, label='linear')
    plt.legend()
    plt.show()
Beispiel #2
0
def invers_rep():

    i = 0
    llargada = 4
    llargada2 = 6
    n = 17
    mides = list()
    temps = list()
    while i < 25:
        base = random.getrandbits(llargada)
        exponent = random.getrandbits(llargada2)
        llargada *= 2
        llargada2 += 2
        i += 1
        temps_inicial = timeit.default_timer()
        k = potencia_modular_eficient(base, exponent, n)
        temps_final = timeit.default_timer()
        temps_invertit = temps_final - temps_inicial
        mides.append(len(str(llargada)))
        temps.append(temps_invertit)

    plt.plot(mides, temps, '-gD')
    plt.xlabel("Nombre de dígits")
    plt.ylabel("Segons")
    plt.show()
Beispiel #3
0
def exp_modular_input():
    n = int(input("entreu la n de Z/n: "))
    base = int(input("Entreu la base: "))
    exponent = int(input("Entreu l'exponent : "))

    k = potencia_modular_eficient(base, exponent, n)

    print("Exponenciacio modular {} de {} = {} (mod {})".format(
        base, exponent, k, n))
Beispiel #4
0
def logaritme_discret(n, base, argument):
    k = -1
    res = -1
    while(res != argument):
        k +=1
        res = potencia_modular_eficient(base, k, n)


    return k
Beispiel #5
0
def log_discret(n, base, arg):
    i = 0
    while arg != utils.potencia_modular_eficient(base, i, n):
        i += 1
    return i

#i = 1
#n = 6
#while i < n:
#    print(str(i) + "^-1 (mod " + str(n) + ") = " + str(invers_modular(i, n)))
#    i += 1

# Exemple = print(log_discret(23,3,12)) Ha de donar 4!
Beispiel #6
0
def esCarmichael(p):
# p > 0
# Retorna cert si p és un nombre de carmichael, fals altrament
    i = 1
    while i < p:
        if euclides.sonCoprimers(i, p):
            if utils.potencia_modular_eficient(i, p-1, p) != 1: 
                return False
        i += 1
    
    if i == p: 
        s = utils.factors_primers(p)
        if len(set(s)) == len(s) and len(s) >= 3: 
            return True

    return False