Start New Discussion within our Software Development Community

I recently wrote a program to determine perfect numbers.....

n=raw_input("Please input a number: ")
factors = []
p=int(n)
for k in range(1):
    x=0
    while x < p-(p/3):
        x=x+1
        z = p/x
        if p%z == 0:
            factors.append(z)
            if factors.count(z) > 1:
                factors.remove(z)

print "The factors are,", factors
print "the sum of the factors is", sum(factors)

if sum(factors) == 2*p:
    print "Therefore,", p ,"is a perfect number as the \nsum of its factors is twice itself."

else:
    print "Therefore,", p ,"is not a perfect number"

It works fine.....
Yet when I modify it ever so slightly to calculate every perfect number up to a certain value,

n=raw_input("Please input a number up to which the computer \n will calculate perfect numbers: ")
factors = []
p=int(n)
t=0
while t <= p:
    t=t+1
    for k in range(1):
        x=0
        while x < t :
            x=x+1
            z = t/x
            if t%z == 0:
                factors.append(z)
                if factors.count(z) > 1:
                    factors.remove(z)

    if sum(factors) == 2*t:
        print  t ,"is a perfect number as the sum of its factors is twice itself."
        print "The factors are,", factors
        print "the sum of the factors is", sum(factors)

I get this reply from python...

3 is a perfect number as the sum of its factors is twice itself.
The factors are, [2, 3, 1]
the sum of the factors is 6

Whats going on??

don't you need to empty the factors array before you start factoring the next number?

Try factors=[] just before the for k in range(1):

This article has been dead for over six months. Start a new discussion instead.