这段代码工作正常。说 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:
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)
然后,如果我想从结果中删除项7 ^ 0因此所有具有零幂的素数,我在第 31 行进行了更改(如果 j!= 0:而不是else:)。然后代码不起作用。它适用于像 13860 这样的数字,其中没有素数的幂为零,而不是像 1980 这样的数字。我找不到问题!更改后的代码是:
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
if j!=0:
power.append(j)
prime.append(g)
x=0
while x<len(power):
print(prime[x],"^",power[x],"*",end="")
x+=1
factorization(1980)