将一个正整数分解质因数。例如:输入90,打印出90=233*5。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
def is_prime2(num):
    for i in range(2, num):
        if not (num % i):
            return False
    return True
def factorization(num):
    if num < 2:
        print('This number should be a positive integer greater than one!')
        return
    elif is_prime2(num):
        print("This number must be composite!")
        return
    else:
        lst = [x for x in range(2, num) if is_prime2(x)]
        str1 = ''
        while int(num) != 1:
            for i in lst:
                if not num % i:
                    str1 += str(i) + '*'
                    num /= i
    return '*'.join(sorted(str1[:-1].split('*')))
if __name__ == '__main__':
    print(factorization(90))
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
 (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
 (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
程序源代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def reduceNum(n):
    print '{} = '.format(n),
    if not isinstance(n, int) or n <= 0 :
        print '请输入一个正确的数字 !'
        exit(0)
    elif n in [1] :
        print '{}'.format(n)
    while n not in [1] : # 循环保证递归
        for index in xrange(2, n + 1) :
            if n % index == 0:
                n /= index # n 等于 n/index
                if n == 1:
                    print index
                else : # index 一定是素数
                    print '{} *'.format(index),
                break
reduceNum(90)
reduceNum(100)
 
以上实例输出结果为:
90 =  2 * 3 * 3 * 5
100 =  2 * 2 * 5 * 5