def lcm(a, b): if a and b: da = list(decompose(abs(a))) db = list(decompose(abs(b))) merge = da for d in da: if d in db: db.remove(d) merge += db return reduce(operator.mul, merge, 1) return 0
def lcm(a, b): if a and b: da = list(decompose(abs(a))) db = list(decompose(abs(b))) merge= da for d in da: if d in db: db.remove(d) merge += db return reduce(operator.mul, merge, 1) return 0
def lcm(a, b): mul = int.__mul__ if a and b: da = list(decompose(abs(a))) db = list(decompose(abs(b))) merge= da for d in da: if d in db: db.remove(d) merge += db return reduce(mul, merge, 1) return 0
def decompose_me(n): return imap( lambda (k, v): (k, reduce(lambda x, y: x+1, v, 0)), groupby( decompose(n) ) )
def euler_totient_float(n): result = n for p in set(decompose(n)): result *= 1 - 1/float(p) return int(round(result))
def almostprime(n, k=2): d = decompose(n) try: terms = [next(d) for i in range(k)] return reduce(int.__mul__, terms, 1) == n except: return False
def euler_totient_float(n): result = n for p in set(decompose(n)): result *= 1 - 1 / float(p) return int(round(result))
def euler_totient(n): result = Decimal(n) for p in set(decompose(n)): factor = 1 - 1 / Decimal(p) result *= factor return int(result)
def euler_totient(n): result = Decimal(n) for p in set(decompose(n)): factor = 1 - 1/Decimal(p) result *= factor return int(result)
def find_euler_perms(n): min_ratio = 100000 min_ratio_n = 1 for x in range(2,n - 1): factors = list(decompose(x)) if len(factors) == 2: p = factors[0] q = factors[1] prime_factor_ratio = (1 - 1/float(p))*(1 - 1/float(q)) # totient = euler_totient_float(x) totient = int(round(x*prime_factor_ratio)) ratio = x / float(totient) if is_permutation(x,totient) and ratio < min_ratio: min_ratio = ratio min_ratio_n = n print "Got new min ratio n " + str(x) + " for ratio " + str(ratio)
def find_euler_perms(n): min_ratio = 100000 min_ratio_n = 1 for x in range(2, n - 1): factors = list(decompose(x)) if len(factors) == 2: p = factors[0] q = factors[1] prime_factor_ratio = (1 - 1 / float(p)) * (1 - 1 / float(q)) # totient = euler_totient_float(x) totient = int(round(x * prime_factor_ratio)) ratio = x / float(totient) if is_permutation(x, totient) and ratio < min_ratio: min_ratio = ratio min_ratio_n = n print "Got new min ratio n " + str(x) + " for ratio " + str( ratio)
def semiprime(n): d = decompose(n) try: return next(d) * next(d) == n except: return False
def semiprime(n): d = decompose(n) try: return next(d) * next(d) == n except StopIteration: return False
def get_divisor_count(number): decomp = list(decompose(number)) return functools.reduce(operator.mul, [decomp.count(prime) + 1 for prime in unique(decomp)], 1)