Python Perfect Numbers

print perfect numbers from 1 to 100 in python
perfect abundant and deficient numbers in python
prime number in python
armstrong number in python
perfect divisor of number in python
perfect number in c
perfect square in python
algorithm for perfect number

So I am supposed to write a Python program that will identify and print all the perfect numbers in some closed interval [ 2, n ], one per line. We only have to use nested while loops/ if-else statements. I did it somehow using a for loop, but can't figure out the same using a while loop. I'd appreciate your help if you could show me how to translate my code into a while loop. Thanks guys. Here's what I have:

limit = int(input("enter upper limit for perfect number search: "))

for n in range(2, limit + 1):
    sum = 0
    for divisor in range(1, n):
        if not n % divisor:
            sum += divisor
        if sum == n:
            print(n, "is a perfect number")

This should work:

limit = int(input("enter upper limit for perfect number search: "))

n = 1

while n <= limit:

    sum = 0
    divisor = 1
    while divisor < n:
        if not n % divisor:
            sum += divisor
        divisor = divisor + 1
    if sum == n:
        print(n, "is a perfect number")
    n = n + 1

Python Exercise: Check whether a number is perfect or not , According to Wikipedia : In number theory, a perfect number is a positive integer that is equal to the sum of its proper positive divisors, that is, the� 8128 is a Perfect Number. The divisors of 8128 are 1, 2, 4, 8, 16, 32, 64, 127, 254, 508, 1016, 2032, 4064 and 8128. The sum of the proper divisors is 1+2+4+8+16+32+64+127+254+508+1016+2032+4064 =8128.

You can replace your for loops with the following:

n = 2
while n < limit + 1:
   ...
   divisor = 1
   while divisor < n:
      ...
      divisor += 1
   ...
   n += 1

Hint: You can also use n/2 as the upper limit for the second loop as any divisor of n cannot be greater than n/2.

Python Tutorial, In this Python Programming video tutorial you will learn about the perfect numbers in detail Duration: 12:27 Posted: Dec 21, 2017 limit = int(input("enter upper limit for perfect number search: ")) for n in range(2, limit + 1): sum = 0 for divisor in range(1, n): if not n % divisor: sum += divisor if sum == n: print(n, "is a perfect number") python python-3.x. share. Share a link to this question. Copy link.

Here is a (somewhat more efficient) sieve version:

# search all numbers in [2..limit] for perfect numbers
# (ones whose proper divisors sum to the number)
limit = int(input("enter upper limit for perfect number search: "))

# initialize - all entries are multiples of 1
#   (ignore sieve[0] and sieve[1])
sieve = [1] * (limit + 1)

n = 2
while n <= limit:
    # check n
    if sieve[n] == n:
        print(n, "is a perfect number")
    # add n to all k * n where k > 1
    kn = 2 * n
    while kn <= limit:
        sieve[kn] += n
        kn += n
    n += 1

Running it to 10000 finds

6 is a perfect number
28 is a perfect number
496 is a perfect number
8128 is a perfect number

and factorizing those shows an interesting pattern:

6          3 * 2                         (  4 - 1) * (  4 / 2)
28         7 * 2 * 2                     (  8 - 1) * (  8 / 2)
496       31 * 2 * 2 * 2 * 2             ( 32 - 1) * ( 32 / 2)
8128     127 * 2 * 2 * 2 * 2 * 2 * 2     (128 - 1) * (128 / 2)

where the first factor (3, 7, 31, 127) is a prime which is one less than a power of two, and it is multiplied by half that same power of two. Also, the powers involved are prime (2**2, 2**3, 2**5, 2**7).

In fact Euclid proved that (2**p - 1) * 2**(p - 1) is a perfect number if 2**p - 1 is prime, which is only possible (though not assured) if p is prime. Euler went further, proving that all even perfect numbers must be of this form.

This suggests an incredibly more efficient version - I am going to go ahead and use for loops, feel free to rewrite it without. First, we need a source of primes and an is_prime test:

def primes(known_primes=[7, 11, 13, 17, 19, 23, 29]):
    """
    Generate every prime number in ascending order
    """
    # 2, 3, 5 wheel
    yield from (2, 3, 5)
    yield from known_primes
    # The first time the generator runs, known_primes
    #   contains all primes such that  5 < p < 2 * 3 * 5
    # After each wheel cycle the list of known primes
    #   will be added to.
    # We need to figure out where to continue from,
    #   which is the next multiple of 30 higher than
    #   the last known_prime:
    base = 30 * (known_primes[-1] // 30 + 1)
    new_primes = []
    while True:
        # offs is chosen so  30*i + offs cannot be a multiple of 2, 3, or 5
        for offs in (1, 7, 11, 13, 17, 19, 23, 29):
            k = base + offs    # next prime candidate
            for p in known_primes:
                if not k % p:
                    # found a factor - not prime
                    break
                elif p*p > k:
                    # no smaller prime factors - found a new prime
                    new_primes.append(k)
                    break
        if new_primes:
            yield from new_primes
            known_primes.extend(new_primes)
            new_primes = []
        base += 30

def is_prime(n):
    for p in primes():
        if not n % p:
            # found a factor - not prime
            return False
        elif p * p > n:
            # no factors found - is prime
            return True

then the search looks like

# search all numbers in [2..limit] for perfect numbers
# (ones whose proper divisors sum to the number)
limit = int(input("enter upper limit for perfect number search: "))

for p in primes():
    pp = 2**p
    perfect = (pp - 1) * (pp // 2)
    if perfect > limit:
        break
    elif is_prime(pp - 1):
        print(perfect, "is a perfect number")

which finds

enter upper limit for perfect number search: 2500000000000000000
6 is a perfect number
28 is a perfect number
496 is a perfect number
8128 is a perfect number
33550336 is a perfect number
8589869056 is a perfect number
137438691328 is a perfect number
2305843008139952128 is a perfect number

in under a second ;-)

Python Program to Check if a Number is a Perfect Number , The program takes a number and checks if it is a Perfect number. Problem Solution. 1. Take in an integer and store it in a variable. 2. Initialize a variable to count� Perfect Number In Python Using While Loop-DecodingDevOps A perfect number is a positive integer that is equal to the sum of its proper divisors. The smallest perfect number is 6, which is the sum of 1, 2, and 3. Other perfect numbers are 28, 496, and 8,128.

I am sharing this codes for alternative. Perfect number is of the form [2^{n-1}(2^{n}-1)] where 2^{n}-1 and n both are prime numbers.

for num in range(2,101):
if all(num%i!=0 for i in range(2,num)):
    num_2=num*2-1
    for num_2 in range(2,101):
        if all(num_2%i!=0 for i in range(2,num_2)):
            MükemmelSayı=2**(num-1)*(2**num-1)
            print(MükemmelSayı)
            break
        break

How to identify and print all the perfect numbers in some closed , A perfect number is a positive integer that is equal to the sum of its proper divisors. The smallest perfect number is 6, which is the sum of 1, 2, and 3.You ca . .. some closed interval [ 2, n ] using Python? PythonProgramming� Write a Python function to check whether a number is perfect or not. According to Wikipedia : In number theory, a perfect number is a positive integer that is equal to the sum of its proper positive divisors, that is, the sum of its positive divisors excluding the number itself (also known as its aliquot sum).


    enter code here
T = int(input())
list1 = list()
for i in range(0,T):
    N = int(input())
    list1.append(N)
    list1 = [int(i) for i in list1]
sum = 0
for ele in list1:
    for j in range(1,ele):
        if ele % j == 0:
            sum = sum + j
    if sum==ele:
        print('True')
    else:
        print('false')

Python Perfect Numbers, This should work: limit = int(input("enter upper limit for perfect number search: ")) n = 1 while n <= limit: sum = 0 divisor = 1 while divisor < n: if� Given a list of the integer numbers and we have to print all perfect numbers present in the given list. This Program iterating through each number one by one in the list, and check whether a given number is a perfect number or not. If a perfect number is found then print it else skip it.

Perfect Number, Write a function to check if a given number is perfect or not. Examples: Input: n = 15 Output: false Divisors of 15 are 1, 3 and 5. Sum of divisors is� Python Programming A perfect number is a positive integer that is equal to the sum of its proper divisors. The smallest perfect number is 6, which is the sum of 1, 2, and 3. You can find perfect numbers within a given range by testing each number for the given condition in the given range.

Python program to print perfect numbers from the given list of integers, Printing perfect numbers: Here, we are going to learn how to find and print the perfect numbers from a given list in Python? # Use Python code to see if numbers are perfect cubes In algebra, a cube of a number is its third power: the result we get by multiplying that number with itself twice (Wikipedia, 2019). A so-called perfect cube is the result of multiplying a positive integer with itself two times (Kelley, 2007; Wikipedia, 2019).

Perfect numbers, A perfect number is a positive integer that is the sum of its proper positive 81.1 Python: Procedural; 81.2 Python: Optimised Procedural; 81.3� Python Program To Check If A Number Is Perfect Square Any number which can be expressed as the product of two whole equal numbers is classified as a perfect square. For example, 64 can be written as 8*8 hence 64 is a perfect square. In this article, we will create a Python program to check whether the number is a perfect square or not.

Comments
  • Many people here are able to give you the solution, but it would be far better if you could come up with it yourself, to become a better programmer. Ask yourself "when should the while-loop be terminated" and incorporate that.
  • Thanks to both responses first of all. See the thing is I cannot use for loops at all. So, that was my issue. How would you resolve the inner for loop then?
  • I revised my answer check it to see the solution. Hope this helps.
  • Just saw this. let me try and see if I can get it to work. Thanks for your help though!