# Solving Leetcode Interviews in Seconds with AI: Perfect Number


	# Introduction
	In this blog post, we will explore how to solve the LeetCode problem "507" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like [Chatmagic](https://www.chatmagic.app), we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

	# Problem Statement
	> A perfect number is a positive integer that is equal to the sum of its positive divisors, excluding the number itself. A divisor of an integer x is an integer that can divide x evenly. Given an integer n, return true if n is a perfect number, otherwise return false.   Example 1:  Input: num = 28 Output: true Explanation: 28 = 1 + 2 + 4 + 7 + 14 1, 2, 4, 7, and 14 are all divisors of 28.  Example 2:  Input: num = 7 Output: false    Constraints:  1 <= num <= 108  

	# Explanation
	Here's the breakdown of the approach, complexity, and the Python code:

*   **High-level Approach:**
    *   Iterate from 1 up to the square root of the input number `num`.
    *   If `i` is a divisor of `num`, add both `i` and `num // i` to the sum of divisors. Handle the case where `i` is the square root of `num` to avoid double-counting.
    *   Finally, compare the sum of divisors (excluding `num` itself) with `num` to determine if it's a perfect number.

*   **Complexity:**
    *   Runtime Complexity: O(sqrt(n))
    *   Storage Complexity: O(1)

	
	# Code
	```python
	def is_perfect_number(num: int) -> bool:
    """
    Given an integer n, return true if n is a perfect number, otherwise return false.

    A perfect number is a positive integer that is equal to the sum of its positive divisors,
    excluding the number itself. A divisor of an integer x is an integer that can divide x evenly.

    Example 1:
    Input: num = 28
    Output: true
    Explanation: 28 = 1 + 2 + 4 + 7 + 14
    1, 2, 4, 7, and 14 are all divisors of 28.

    Example 2:
    Input: num = 7
    Output: false

    Constraints:
    1 <= num <= 108
    """
    if num <= 1:
        return False

    sum_of_divisors = 1
    for i in range(2, int(num**0.5) + 1):
        if num % i == 0:
            sum_of_divisors += i
            if i * i != num:
                sum_of_divisors += num // i

    return sum_of_divisors == num
	```
			
