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: