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
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
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
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
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
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)
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)
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
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
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
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
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
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
def get_one_factor(n): for x in factors(n, False, False, 2 * math.log(math.log(n)), 1.0): return x
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")
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