python中的因子分解
此代码运行良好。比如说1980年,它给出的结果是2^2*3^2*5^1*7^0*11^1*(最后还有一个额外的星号。我可以删除它。这与我的问题无关。 代码是:python中的因子分解,python,factorization,Python,Factorization,此代码运行良好。比如说1980年,它给出的结果是2^2*3^2*5^1*7^0*11^1*(最后还有一个额外的星号。我可以删除它。这与我的问题无关。 代码是: prime=[2,3,5] f=7 def next_prime(f): j=0 while j==0: for x in prime: if f%x==0: f+=2 break else:
prime=[2,3,5]
f=7
def next_prime(f):
j=0
while j==0:
for x in prime:
if f%x==0:
f+=2
break
else:
j=1
return f;
def factorization(n):
list=[2,3,5]
power=[]
x=0
while x<len(list):
j=0
while n%list[x]==0:
j+=1
n=n/list[x]
power.append(j)
x+=1
if n!=1:
while n!=1:
g=next_prime(f)
j=0
while n%g==0:
j+=1
n=n/g
else:
power.append(j)
prime.append(g)
x=0
while x<len(power):
print(prime[x],"^",power[x],"*",end="")
x+=1
factorization(1980)
prime=[2,3,5]
f=7
def下一个_素数(f):
j=0
当j==0时:
对于素数中的x:
如果f%x==0:
f+=2
打破
其他:
j=1
返回f;
def因子分解(n):
列表=[2,3,5]
功率=[]
x=0
而x如果你只想得到一个数的素因子,你可以试试:
def primefactors(x):
factorlist=[]
loop=2
while loop<=x:
if x%loop==0:
x/=loop
factorlist.append(loop)
else:
loop+=1
return factorlist
我没有分析您的逻辑,但是您错误地使用了else
子句。while..else
只有在while
中调用break
时才有意义。在第一个代码示例中,始终执行else
分支
例如,即使以下代码也将运行else
branch:
while False:
print 'while'
else:
print 'else'
要补充imsc的答案,
实际上,有一种算法使用loop=6和loop+=6,然后尝试loop+1和loop-1,这两种算法运行得更好。但是必须先手动尝试2和3。list
是变量名的错误选择。它隐藏了内置的list
类型名。OK..我有我的prblm..thx!
primefactors(1980)
[2, 2, 3, 3, 5, 11]
primefactors(13860)
[2, 2, 3, 3, 5, 7, 11]
while False:
print 'while'
else:
print 'else'