[算法]分解因数

将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)+'={}\n'.format(i)
        else:
            print '*'.join(map(str, log[i]))+'={}\n'.format(i)

if __name__ == '__main__':
    main()

# print parse_int(108)
# # print log
            



                

 

转载于:https://www.cnblogs.com/fcyworld/p/7533474.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值