Java Program to Check Perfect Number

A perfect number is a number that is equal to the sum of its proper divisors excluding itself.

For example, 6 is a perfect number because its divisors (1, 2, 3) add up to 6.

1. Understanding the Problem

Determine whether a given number is a perfect number.

Number: 6 → Perfect
Number: 28 → Perfect
Number: 10 → Not Perfect

2. Using Basic Loop

Java
Check perfect number using loop
import java.util.Scanner;

public class PerfectNumber {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter a number: ");
        int num = sc.nextInt();

        int sum = 0;

        for (int i = 1; i < num; i++) {
            if (num % i == 0) {
                sum += i;
            }
        }

        if (sum == num)
            System.out.println("Perfect Number");
        else
            System.out.println("Not a Perfect Number");
    }
}

3. Optimized Approach

Java
Check perfect number using optimized logic
import java.util.Scanner;

public class PerfectOptimized {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter a number: ");
        int num = sc.nextInt();

        int sum = 1;

        for (int i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) {
                sum += i;
                if (i != num / i) {
                    sum += num / i;
                }
            }
        }

        if (num > 1 && sum == num)
            System.out.println("Perfect Number");
        else
            System.out.println("Not a Perfect Number");
    }
}

4. Common Mistakes

1. Including the number itself in divisor sum.

2. Not starting sum from 1.

3. Running loop till n instead of √n (inefficient).

4. Not handling numbers less than 1.

5. Applications

1. Used in number theory studies.

2. Helpful for understanding divisor-based logic.

3. Common coding interview question.

Conclusion

Perfect number programs help in understanding loops and divisor logic.

Using optimized methods improves performance for larger numbers.