1

这段代码工作正常。说 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)
4

3 回答 3

2

我没有分析你的逻辑,但是你else错误地使用了子句。while .. else只有当你break在你的while. 在您的第一个代码示例中,else始终执行分支。

例如,即使以下代码也会运行else分支:

while False:
    print 'while'
else:
    print 'else'
于 2012-07-26T08:17:57.000 回答
1

如果您只对获取数字的质因数感兴趣,可以尝试:

def primefactors(x):
    factorlist=[]
    loop=2
    while loop<=x:
        if x%loop==0:
            x/=loop
            factorlist.append(loop)
        else:
            loop+=1
    return factorlist

例如:

primefactors(1980)
[2, 2, 3, 3, 5, 11]
primefactors(13860)
[2, 2, 3, 3, 5, 7, 11]
于 2012-07-26T08:14:49.757 回答
0

要添加到 imsc 的答案,实际上有一种算法使用 loop =6 和 loop +=6 然后尝试运行更好的 loop+1 和 loop-1。不过,必须先手动尝试 2 和 3。

于 2012-07-27T18:40:32.423 回答