[算法]分解因数

将101到200间的数分解因数

log = {}

def prime_log(num):
    if num < 3:
        return 0
    flags = [True] * num 
    flags[0], flags[1] = False, False
    for i in range(2, int(num**0.5+1)):
        if flags[i]:
            flags[i*i:num:i] = [False]*len(flags[i*i:num:i])
    return flags

primes = prime_log(201)
# print primes

def parse_int(num):
    if num in log:
        return log[num]
    if primes[num]:
        log[num] = [num]
        return [num]
    res = []
    for i in range(2, num/2+1):
        if not num%i:
            if primes[i]:
                res.append(i)
                e = log[num/i] if num/i in log and len(log[num/i]) else parse_int(num/i)
                for j in e:
                    res.append(j)
                break
    for i in res:
        if num in log:
            log[num].append(i)
        else:
            log[num] = []
            log[num].append(i)
    return res



def main():
    for i in range(101, 200):
        parse_int(i)
        if not len(log[i]):
            print str(i)+'={}
'.format(i)
        else:
            print '*'.join(map(str, log[i]))+'={}
'.format(i)

if __name__ == '__main__':
    main()

# print parse_int(108)
# # print log
            



                
原文地址:https://www.cnblogs.com/fcyworld/p/7533474.html