Python 练习实例14
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
程序源代码:
实例(Python 2.0+)
#!/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)
实例(Python 3.0+)
#!/usr/bin/python3
def reduceNum(n):
print ('{} = '.format(n), end=" ")
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 range(2, n + 1) :
if n % index == 0:
n //= index # n 等于 n//index
if n == 1:
print (index )
else : # index 一定是素数
print ('{} *'.format(index), end=" ")
break
reduceNum(90)
reduceNum(100)
以上实例输出结果为:
90 = 2 * 3 * 3 * 5 100 = 2 * 2 * 5 * 5
Python 100例
小天儿
102***9045@qq.com
使用 Python3 的参考解法:
#!/usr/bin/python3 x = int(input("是否进入循环?是:1, 否:0\n")); while(x): n = int(input("请输入一个正整数:")); print ("%d = " %n , end = ''); while n not in [1]: for index in range(2, n+1): if n % index == 0: n = int(n/index); if n == 1: print("%d " %index , end = ''); else: print("%d * " %index , end = '') break; print(); x = int(input("是否进入循环?是:1, 否:0\n"));输出测试如下所示:
小天儿
102***9045@qq.com
JohnLee
372***369@qq.com
使用 Python3 的参考解法:
#!/usr/bin/python3 def prime(n): l = [] while n > 1: for i in range(2, n + 1): if n % i == 0: n = int(n / i) l.append(i) break return l s = input("输入一个正整数:") if s.isdigit() and int(s) > 0: print(s, "=", "*".join([str(x) for x in prime(int(s))])) else: print("请输入正确的正整数")JohnLee
372***369@qq.com
Chivalry
825***501@qq.com
参考解法:
#!/usr/bin/python # -*- coding: UTF-8 -*- input = int(raw_input("请输入要分解的正整数:")) temp = [] while input!=1: for i in range(2,input+1): if input%i == 0: temp.append(i) input = input/i break print tempChivalry
825***501@qq.com
Eric
382***115@qq.com
参考方案:
#!/usr/bin/python # -*- coding: UTF-8 -*- import math l=[] def resolve(num): do=0 if num<1: return elif num==1: l.append(num) return for i in range(2,int(math.sqrt(num))+1): if num%i==0: do=1 l.append(i) num=num/i resolve(num) break if do==0: l.append(num) num=int(raw_input()) resolve(num) print l print "%d ="%num, for k in range(len(l)): if k!=len(l)-1: print "%d *"%l[k], else: print "%d" % l[k]Eric
382***115@qq.com
Kunz
sun***gup@163.com
我的貌似更简单更好理解一些:
#!/usr/bin/python # -*- coding: UTF-8 -*- n=int(raw_input('Please input a number:')) n1=n l=[] while n>1: for i in range(2,n+1): if n%i==0: n=n/i l.append(str(i)) break print '%d=' %n1 + '*'.join(l)Kunz
sun***gup@163.com
Almighty
132***9971@qq.com
Python3 参考方法:
#!/usr/bin/env python3 from math import sqrt flag = 0 n = int(input("输入一个整数:")) print("%d="%n,end="") m = int(sqrt(n)) + 1 for j in range(n): for i in range(2,m): if n%i == 0: if n == i: flag = 1 print("%d"%i,end='') else: print("%d*"%i,end='') n /= i break if flag == 1: breakAlmighty
132***9971@qq.com
Mark
104***7790@qq.com
Python3.6 这种写法能够运行更大的数字
#!/usr/bin/python3 x=input("输入一个正整数:") if x.isdigit() and int(x)>0: x=int(x) t,i=1,2 print(x,end="=") while t>=0: if x%i==0: print(i,end="") x/=i t=x-i if x!=1: print("*",end="") while x%i and x!=1: i+=1 else: print("请输入正确的正整数")Mark
104***7790@qq.com
CosmosHua
cos***cosmos@163.com
Python3简明解法:
def factor(n): fac = [] hf = n//2 while n>1: for i in range(2, hf+1): if n%i == 0: n //= i; fac.append(i); break return fac n = int(input("input a number: ")) print(n, "=", factor(n))CosmosHua
cos***cosmos@163.com
kevinjin
314***1905@zju.edu.cn
参考方法:
#!/usr/bin/python # -*- coding: UTF-8 -*- num=raw_input('输入一个整数:\n') num=int(num) print '%d =' %num, i=2 while i<=num: if num%i==0: if num==i: print '%d' %i, break else: num=num/i print '%d *' %i, else: i+=1kevinjin
314***1905@zju.edu.cn
小差罗
675***527@qq.com
Python 3.x 下测试
办法比较蠢 但是挺好理解的吧循环次数不多,定义素数函数,能被素数整除就输出
import math def isprime(num): flag=1 for i in range(2,int(math.sqrt(num))+1): if num%i==0: flag=0 break if flag: return True else: return False num=int(input('input a number:')) print(num,'=',end='') while(not isprime(int(num))): for i in range(2,int(num)): if num%i==0: print(i,'*',end='') num/=i break print(int(num))小差罗
675***527@qq.com
大大大大大大大熊
382***076@qq.com
Python3 参考方法:
import math print("请输入一个正整数:") n = int(input()) if n <= 0: print("请输入正整数") i=2 if n!=1: while i!=n: if n % i == 0: print(i) n = n // i else: i+=1 print(i) else: print(n)大大大大大大大熊
382***076@qq.com
wuhangxiang
yef***yun241@foxmail.com
参考方法:
#!/usr/bin/python # -*- coding: UTF-8 -*- n=2 def fenjie(num): global n while n<=num: if n==num: print n break elif n<num and num%n==0: print '%d*'%n, num/=n fenjie(num) break elif n<num and num%n!=0: n+=1 fenjie(num) break number=input("input a number:") print '%d='%number, fenjie(number)wuhangxiang
yef***yun241@foxmail.com
Echo
csz***13@163.com
函数处理, 兼容 python2.x 与 python3.x
#!/usr/bin/python # -*- coding: UTF-8 -*- num = int(input('请输入需要分解的数:')) def fenjie(num): strf = '{}='.format(num) flag = True while flag: for i in range(2,num+1): if not num%i: if i==num: flag = False strf = strf + str(i) else: strf = strf + str(i) + '×' num = num//i break return strf print(fenjie(num))Echo
csz***13@163.com
阳光不锈
173***979@qq.com
Python3 下测试:
#生成器函数prime,返回一个质数生成器prime(),可以生成所有质数。 def prime(): i=2 while 1: for j in range(2,i): if i%j==0: i+=1 break else: yield i i+=1 k=int(input("是否进入循环?是:1, 否:0\n")) while k: n=int(input('请输入一个大于1的正整数:')) print(str(n)+'=',end='') flag=1 while flag: for i in prime(): if not n%i: if i==n: flag=0 print(i) else: print(str(i)+'*',end='') n=n//i break print('\n') k=int(input("是否进入循环?是:1, 否:0\n"))阳光不锈
173***979@qq.com
阳光不锈
173***979@qq.com
Python3: 使用一个生成器 f(x),生成整数 x 的所有质因数。代码如下:
#isprime函数,x是素数返回1,不是返回0 def isprime(x): for i in range(2,x): if x%i==0: return 0 else: return 1 #生成器f(x),生成整数x的所有质因数 def f(x): while not isprime(x): for i in range(2,x): if x%i==0: x=x//i yield i break yield x k=int(input('是否继续求解?是:1, 否:0\n')) while k: n=int(input('num:')) print(str(n)+'=',end='') s='' for j in f(n): s+=str(j)+'*' print(s[:-1]) print() k=int(input('是否继续求解?是:1, 否:0\n'))阳光不锈
173***979@qq.com