示例#1
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):
    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
示例#4
0
def decompose_me(n):
    return imap(
        lambda (k, v): (k, reduce(lambda x, y: x+1, v, 0)),
        groupby(
            decompose(n)
        )
    )
示例#5
0
def euler_totient_float(n):
    result = n
    
    for p in set(decompose(n)):
        result *= 1 - 1/float(p)
    
    return int(round(result))
示例#6
0
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
示例#7
0
def euler_totient_float(n):
    result = n

    for p in set(decompose(n)):
        result *= 1 - 1 / float(p)

    return int(round(result))
示例#8
0
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
示例#9
0
def euler_totient(n):

    result = Decimal(n)

    for p in set(decompose(n)):
        factor = 1 - 1 / Decimal(p)
        result *= factor

    return int(result)
示例#10
0
def euler_totient(n):
    
    result = Decimal(n)
    
    for p in set(decompose(n)):
        factor = 1 - 1/Decimal(p)
        result *= factor
    
    return int(result)
示例#11
0
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)
示例#12
0
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)
示例#13
0
def semiprime(n):
    d = decompose(n)
    try:
        return next(d) * next(d) == n
    except:
        return False
示例#14
0
def semiprime(n):
    d = decompose(n)
    try:
        return next(d) * next(d) == n
    except StopIteration:
        return False
def semiprime(n):
    d = decompose(n)
    try:
        return next(d) * next(d) == n
    except:
        return False
示例#16
0
def get_divisor_count(number):
    decomp = list(decompose(number))
    return functools.reduce(operator.mul, [decomp.count(prime) + 1 for prime in unique(decomp)], 1)