def generate_semiprimes(n): ''' n is num_digits ''' import random random.seed(1) nums = xrange_(BASE**n, BASE**(n+1)-1) nums = itertools.ifilter(is_prime, nums) for p, q in itertools.combinations_with_replacement(nums, 2): assert is_prime(p) if random.random() < 0.9999: continue target = p*q yield target
EXP30 = 292951160076082381 EXP40 = 1208925727750433490141601 EXP50 = 1267650589799944054235347335521 EXP70 = 696898287104567707994557936377097402581467 EXP100 = 803433889244035421575180038607945042433021719029044123614381 RSA100 = 1522605027922533360535618378132637429718068114961380688657908494580122963258952897654000350692006139 #target = 143 #target = 56153 target = EXP30 print factorisation_summary(target) analyse(target, product_to_hamming_distance, 10000000) raise Exception n = 17 nums = range(2**n, 2**(n+1)-1) nums = (num for num in nums if is_prime(num)) for p, q in itertools.combinations_with_replacement(nums, 2): import random if random.randint(0, 1) == 1: continue target = p*q # print factorisation_summary(target) error_func = product_to_hamming_distance max_states = 100000 analyse(target, error_func, max_states=max_states)