Decomposition quality factor

Method 001

If you Input a positive integer num, the program will give its decomposition quality factor.

step 1: Find and save all the prime number from 2 to num(included)

Step 2: Go through all the prime number got in step 1,  save the divisor if num can be divided by it exactly. 

Step 3: Repeat step 2 for num/divisor

Step 4: Print the decomposition expression of num

# The method 001 is just a primitive one, which should be optimized later. So...TBC

NUM = num = input("Input a positive integer: ")
prime = [2]
primeNum = []
for i in range(3,num+1,2):
    flag = 1
    for j in range(3,i+1,2):
        flag *= i % j
    if flag != 0:
        prime.extend([i])
 
prime.sort()
#print prime

while num != 1:
    for i in prime:
        if num % i == 0:
            primeNum.extend([i])
            num = num / i
if num == NUM:
    primeNum.extend([NUM])

primeNum.sort()

print(str(NUM)+' = 1'),
for i in primeNum:
    print('*'+str(i)),
        

Test :

Method 002 

# Method 002
from math import sqrt
NUM = num = input("Input a positive integer: ")
prime = [2]
primeNum = []
for i in range(3,num+1,2):
    flag = 1
    for j in range(3,int(sqrt(i))+1,2): # Optimized !!
        flag *= i % j
    if flag != 0:
        prime.extend([i])

#prime.sort() # No need to sort()
print prime

while num != 1:
    for i in prime:
        if num % i == 0:
            primeNum.extend([i])
            num = num / i
if num == NUM:
    primeNum.extend([NUM])

primeNum.sort()

print(str(NUM)+' = 1'),
for i in primeNum:
    print('*'+str(i)),
        

Test:

Can caculate seven digits in seconds.

 Method 003 

# Method 003
from math import sqrt
NUM = num = input("Input a positive integer: ")
prime = [2]
primeNum = []
for i in range(3,num+1,2):
    flag = 1
    for j in range(3,int(sqrt(i))+1,2): 
        if i % j == 0:      # optimized !! No need to test all divisor 
            flag = 0
            break
    if flag:
        prime.extend([i])

#prime.sort() # Doesn't need to sort()
print prime

while num != 1:
    for i in prime:
        if num % i == 0:
            primeNum.extend([i])
            num = num / i
if num == NUM:
    primeNum.extend([NUM])

primeNum.sort()

print(str(NUM)+' = 1'),
for i in primeNum:
    print('*'+str(i)),

Test:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值