def lemma_add(p, a, b, S, m): lbin0 = lbin(S, a, 0, p, m) lbinB = lbin(S, a, b, p, m) return (lbin0, lbinB)
metavar='m', default=2**16, type=int, help='Table size.') parser.add_argument('-r', metavar='r', default=1024, type=int, help='Repeats.') args = vars(parser.parse_args()) p = args['p'] m = args['m'] l = 4 * int(m**(float(1) / 3)) G = choose_generator(m / l, p) # A = generate_multipliers(G, p) A = [] print p, m, l, len(G), len( A) #, len(G) ** 2 / 2 * (1 - 2 * len(G) ** 2 / p) S = generate_set(G, l) print len(S) sl = 0 for i in range(args['r']): l = lbin(S, random.randint(1, p - 1), 0, p, m) sl += l # print l print float(sl) / args['r']
def lemma_inverse(p, a, S, m): lbinP = lbin(S, a, 0, p, m) lbinM = lbin(S, p - a, 0, p, m) return (lbinP, lbinM)