-
Notifications
You must be signed in to change notification settings - Fork 34
/
Copy path小程_分解质因数.py
69 lines (63 loc) · 2.01 KB
/
小程_分解质因数.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#作者xiao
位数上限=10
#设置输入位数上限。如设置值为5,则最大可分解五位数99999
#如设置过大,将导致初始化时间较长。
显示=print
整=int
文=str
数列=range
输入=input
def 质数(n=2,m=-1,x=-1,位数上限=-1):
"""输出小于n,或n-m之间的质数,或分解x的质因数
质数(n) 质数(n,m) 质数(x=数字) 作者xiao
初次分解x先设置位数上限 质数(位数上限=7)
如设置为5,最大分解99999,以此类推
"""
global 质数表,位数
if not 位数上限==-1: n,位数=整(10**(位数上限/2)),位数上限
if x==-1:
if m==-1:n,m=2,n
#给出n-m之间的质数表
质数表=[2, 3, 5, 7]
开,关=1,3
while m>质数表[-1]+1:
开始,结束=质数表[开]**2,质数表[关]**2
开,关=关,关+2
for a in 数列(开始,结束,2):
for 质数 in 质数表[1:开]:
if a%质数==0: break
else: 质数表.append(a)
质数表=[d for d in 质数表 if n<=d<=m]
return 质数表
else:
#分解x的质因数
if x<2: return '数字超范围'
elif x in [2,3,5,7]: return 文(x)+'=质数' #[x]
elif x>整(10**位数-1):
return '数字超范围:'+文(10**位数-1)
else:
因数表,文本z=[0],''
a,v=x,1
while v:
for 质数 in 质数表:
if a%质数==0:
因数表+=[质数]
if a==质数: v=0
a=a//质数
break
else:
因数表+=[a]
break
if 因数表[1]==x: return 文(x)+'=质数' #[x]
else:
for y in 因数表[1:]: 文本z+=文(y)+'x'
return 文(x)+'='+文本z[:-1] #因数表[1:]
显示('正在初始化:上限','9'*位数上限)
if 位数上限>11 :显示('预测需要:',整(4.4**(位数上限-11)),'秒')
质数(位数上限=位数上限)
显示("初始化完成")
#for x in 数列(0,1001,1):显示(质数(x=x))
while 1:
try:x=abs(整(输入('分解质因数:')))
except: pass
else:显示(质数(x=x))