质因数分解

代码:

#!/usr/bin/env python

# unique factorization
# e.g
# 7 is a prime number
# 6000 = [2^4]*[3^1]*[5*3]
import sys

def uniq_fac(num):
    '''
    unique factorization of integer num
    return a tuple (flag, prime-list, index-list)
    flag: num is prime or not
    prime-list: [p1, p2, ...pr]
    index-list: [e1, e2, ...er]
    '''
    if not isinstance(num, int):
        print num, 'not an integer'
        sys.exit(1)
    flag = 1
    prime_list = []
    index_list = []
    for i in xrange(2, num/2+1):
        if num%i == 0:
            prime_list.append(i)
            idx = 0
            while num%i == 0:
                num = num/i
                idx += 1
            index_list.append(idx)
            flag = 0
    return (flag, prime_list, index_list)

def test_uniq_fac(num):
    (flag, prime_list, index_list) = uniq_fac(num)
    if flag:
        print num, 'is a prime'
    else:
        print num, '= ',
        for i in range(0, len(prime_list)):
            print '[%d^%d]' % (prime_list[i], index_list[i]),
            if not i==len(prime_list)-1:
                print '*',
        print

def test(argv):
    for num in argv:
        test_uniq_fac(int(num))

if __name__ == '__main__':
    test(sys.argv[1:])

测试示例:

./unique_factorization.py 3829374
3829374 =  [2^1] * [3^2] * [19^1] * [11197^1]

转载于:https://my.oschina.net/u/158589/blog/101572

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值