示例#1
0
def is_square_free(n):
    prime_list = list(pyecm.factors(n, False, True, 8, 1))
    print(prime_list)
    for i in range(len(prime_list) - 1):
        if prime_list[i] == prime_list[i + 1]:
            return False
    return True
示例#2
0
def generator(dimensionPrimeNumber, startPrimeNumber):
    pq = []
    for i in range(2):
        TMP = startPrimeNumber
        while len(str(TMP)) < dimensionPrimeNumber:
            N = 4 * TMP + 2
            U = 0
            while True:
                candidate = (N + U) * TMP + 1
                a = randint(2, 5)
                if pow(a, int(candidate - 1), int(candidate)) == 1 and pow(
                        a, int(N + U),
                        int(candidate)) != 1 and candidate % 4 == 3:
                    TMP = candidate
                    break
                else:
                    U = U - 2
        pq.append(TMP)
        startPrimeNumber = startPrimeNumber + 2
        while len(list(pyecm.factors(startPrimeNumber, False, True, 8,
                                     1))) != 1:
            startPrimeNumber = startPrimeNumber + 2
        TMP = startPrimeNumber
    p = pq[0]
    q = pq[1]
    print("\np = {}, длина = {}".format(p, len(str(p))))
    print("q = {}, длина = {}".format(q, len(str(q))))
    return p, q
示例#3
0
def generate_p_q(prime_number, start_prime):
    tmp = start_prime
    pq = []
    for i in range(4):
        while len(str(tmp)) < prime_number:
            N = 4 * tmp + 2
            U = 0
            candidate = 0
            while True:
                candidate = (N + U) * tmp + 1
                if pow(2, int(candidate - 1), int(candidate)) == 1 and pow(
                        2, int(N + U), int(candidate)) != 1:
                    tmp = candidate
                    break
                else:
                    U = U - 2
        pq.append(tmp)
        start_prime = start_prime + 2
        while len(list(pyecm.factors(start_prime, False, True, 8, 1))) != 1:
            start_prime = start_prime + 2
        tmp = start_prime
    Pa = pq[0]
    Qa = pq[1]
    Pb = pq[2]
    Qb = pq[3]
    return Pa, Qa, Pb, Qb
示例#4
0
def find_p():
    a = 3
    q = generator(100, a)
    p = 2 * q + 1
    while isprime(p) == False:
        a = a + 2
        while len(list(pyecm.factors(a, False, True, 8, 1))) != 1:
            a += 2
        #print('a', a)
        q = generator(100, a)
        #print('q', q)
        p = 2 * q + 1
        #print('p', p)
    if len(list(pyecm.factors(p, False, True, 8, 1))) == 1:
        #print('len', len(list(pyecm.factors(p, False, True, 8, 1))))
        return p, q
示例#5
0
文件: 15.py 项目: KhorowD/crypto_labs
def generate_p_q():

    prime_number = 82
    start_prime = 367
    tmp = start_prime
    pq = []
    for i in range(2):

        while len(str(tmp)) < prime_number:
            N = 4 * tmp + 2
            U = 0
            candidate = 0
            while True:
                candidate = (N + U) * tmp + 1
                if pow(2, int(candidate - 1), int(candidate)) == 1 and pow(
                        2, int(N + U), int(candidate)) != 1:
                    tmp = candidate
                    break
                else:
                    U = U - 2
        pq.append(tmp)
        start_prime = start_prime + 2
        while len(list(pyecm.factors(start_prime, False, True, 8, 1))) != 1:
            start_prime = start_prime + 2
        tmp = start_prime
    p = pq[0]
    q = pq[1]
    print("\np = {}, длина = {}".format(p, len(str(p))))
    print("\nq = {}, длина = {}".format(q, len(str(q))))
    return p, q
示例#6
0
def ecmtestcomps():
    rows = [['Magnitude', 'Time (sec)']]
    path = r'C:\Users\Kenny\Dropbox\BCA\Senior Year\ToK\ecm_composite.csv'

    for i in range(len(primes)):
        start = time.clock()
        for j in range(100):
            len(list(factors(composites[i][0], False, True, 10, 1))) == 1
            len(list(factors(composites[i][1], False, True, 10, 1))) == 1
        t = time.clock() - start
        row = [i, t]
        print(row)
        rows.append(row)

        with open(path, 'w', newline='') as f:
            writer = csv.writer(f)
            writer.writerows(rows)
示例#7
0
def ecmtestprimes():
    rows = [['Magnitude', 'Time (sec)']]
    path = r'C:\Users\Kenny\Dropbox\BCA\Senior Year\ToK\ecm_prime.csv'

    for i in range(len(primes)):
        start = time.clock()
        for j in range(100):
            len(list(factors(primes[i][0], False, True, 10, 1))) == 1
            len(list(factors(primes[i][1], False, True, 10, 1))) == 1
        t = time.clock() - start
        row = [i, t]
        print(row)
        rows.append(row)
        
        with open(path, 'w', newline='') as f:
            writer = csv.writer(f)
            writer.writerows(rows)
示例#8
0
def is_square_free(n):
    multipliers_list = list(pyecm.factors(
        n, False, True, 8, 1))  # данная функция факторизирует число n
    # описание библиотеки pyecm https://github.com/martingkelly/pyecm/blob/master/pyecm.py
    for i in range(len(multipliers_list) - 1):  # просматриваем уже с
        if multipliers_list[i] == multipliers_list[i + 1]:
            return False  # смотрим, если два числа в массиве равны - то это квадрат
    return True
示例#9
0
def getECMFactors( target ):
    from pyecm import factors

    n = int( floor( target ) )

    verbose = g.verbose
    randomSigma = True
    asymptoticSpeed = 10
    processingPower = 1.0

    if n < -1:
        return [ ( -1, 1 ) ] + getECMFactors( fneg( n ) )
    elif n == -1:
        return [ ( -1, 1 ) ]
    elif n == 0:
        return [ ( 0, 1 ) ]
    elif n == 1:
        return [ ( 1, 1 ) ]

    if verbose:
        print( '\nfactoring', n, '(', int( floor( log10( n ) ) ), ' digits)...' )

    if g.factorCache is None:
        loadFactorCache( )

    if n in g.factorCache:
        if verbose and n != 1:
            print( 'cache hit:', n )
            print( )

        return g.factorCache[ n ]

    result = [ ]

    for factor in factors( n, verbose, randomSigma, asymptoticSpeed, processingPower ):
        result.append( factor )

    result = [ int( i ) for i in result ]

    largeFactors = list( collections.Counter( [ i for i in result if i > 65535 ] ).items( ) )
    product = int( fprod( [ power( i[ 0 ], i[ 1 ] ) for i in largeFactors ] ) )

    save = False

    if product not in g.factorCache:
        g.factorCache[ product ] = largeFactors
        save = True

    result = list( collections.Counter( result ).items( ) )

    if n > g.minValueToCache and n not in g.factorCache:
        g.factorCache[ n ] = result
        g.factorCacheIsDirty = True

    if verbose:
        print( )

    return result
示例#10
0
def find_e(p, q, fi):
    e = 17
    #i = 10 ** 2
    #while i < fi:
    if isprime(e) and (gcd(e, p - 1) == gcd(e, q - 1) == 1):
        if len(list(pyecm.factors(e, False, True, 8, 1))) == 1:
            #e = i
            #break
            return e % fi
    else:
        #i += 1
        e += 1
    return e % fi
示例#11
0
def validate(jamcoin, divisors):
    outstrings = []
    for i, j in zip(range(2, 11), divisors):
        jamcoin_ten = int(jamcoin, i)
        if gmpy2.is_prime(jamcoin_ten):
            return False
        outstrings.append(
            pyecm.factors(jamcoin_ten, False, True, 10, 1).__next__())
        # outstrings.append(factors.factors(jamcoin_ten).__next__()[0])
    print(jamcoin, end='')
    for i in outstrings:
        print(' ', end='')
        print(i, end='')
    print()
    return True
示例#12
0
def get_primitive_root(prime):
    # calculate phi(n)
    # phi(prime) is (prime-1)
    phi = prime - 1
    prime_factors = list(pyecm.factors(phi, False, True, 10, 1))
    # set range for primitive root
    # so that we don't have to calculate all the roots
    d_range = np.random.randint(20, 30)
    possible_root = 5
    while possible_root < prime:
        temp = []
        is_root = True
        for i in range(len(prime_factors)):
            remainder = gmpy2.powmod(possible_root, (phi // prime_factors[i]),
                                     prime)
            # if remainder is 1, then current number we're checking is not a primitive root
            if remainder == 1:
                is_root = False
                break
        if is_root and possible_root >= d_range:
            return possible_root
        possible_root = possible_root + 1
示例#13
0
def findPrimitive(n):
    s = set()
    # находим функцию эйлера
    phi = n - 1

    # факторизуем функцию эйлера
    s = set(pyecm.factors(phi, False, True, 8, 1))
    for r in range(2, phi + 1):
        #Проходимся по всем простым делителям phi
        # и проверяем, если найдена степень равная 1
        flag = False
        for it in s:

            # Проверяем если r^((phi)/primefactors)
            # mod n сравнимо с 1 или нет
            if (pow(r, phi // it, n) == 1):
                flag = True
                break
        # если найден первообразный корень
        if (flag == False):
            return r

            # если не найдено первообразного корня
    return -1
示例#14
0
def get_one_factor(n):
    for x in factors(n, False, False, 2 * math.log(math.log(n)), 1.0):
        return x
示例#15
0
f = open('primes2011.txt', 'w')
start_time = time.time()
dimensionPrimeNumber = 500
startPrimeNumber = 2011
TMP = startPrimeNumber

for i in range(1000):
    print(i + 1)
    while len(str(TMP)) < dimensionPrimeNumber:
        N = 4 * TMP + 2
        U = 0
        candidate = 0
        while True:
            candidate = (N + U) * TMP + 1
            a = randint(2, 5)
            if pow(a, int(candidate - 1), int(candidate)) == 1 and pow(
                    a, int(N + U), int(candidate)) != 1:
                TMP = candidate
                break
            else:
                U = U - 2
    print(TMP)
    f.write("Число№ " + str(i + 1) + "= " + str(TMP) + "\n")
    startPrimeNumber = startPrimeNumber + 2
    while len(list(pyecm.factors(startPrimeNumber, False, True, 8, 1))) != 1:
        startPrimeNumber = startPrimeNumber + 2
    TMP = startPrimeNumber

print("Время выполнения: ", time.time() - start_time)
f.write("Время выполнения: " + str(time.time() - start_time) + "\n")
示例#16
0
def Func_isSquareFree(n):
    multipliers_list = list(pyecm.factors(n, False, True, 8, 1))
    for i in range(len(multipliers_list) - 1):
        if multipliers_list[i] == multipliers_list[i + 1]:
            return False
    return True