import java.util.Scanner; /* * The program below is a java script that helps find the perfect numbers using * Nested Loops. * A perfect numbersber is a positive integer that equals the sum of its * proper positive divisors (excluding the number itself) * */ public class PerfectNumbers { public static void main(String[] args) { // Part 1: Find perfect numbers between 1 and 200 System.out.println("Perfect Numbers between 1 and 200:"); // findAndPrintPerfectNumber(200); // Add a separator line in the output. System.out.println("\n----------------------------------------\n"); // Part 2: User input range (up to maximum of 1000) Scanner scanner = new Scanner(System.in); int upperBound; do { System.out.print("Enter an upper bound between 1 and 1000 for checking perfect numbers: "); while (!scanner.hasNextInt()) { // Validate integer input. System.out.println("That's not a valid number. Please enter an integer."); scanner.next(); // discard invalid input System.out.print("Enter an upper bound between 1 and 1000: "); } upperBound = scanner.nextInt(); if (upperBound < 1 || upperBound > 9000) { System.out.println("Please enter a number between 1 and 1000."); } else { break; } } while (true); // Now check for perfect numbers in the user-specified range. System.out.println("\nPerfect Numbers between 1 and " + upperBound + ":"); // findAndPrintPerfectNumber(upperBound); scanner.close(); } /** * This method finds and prints all perfect numbers up to a given limit * (inclusive). */ public static void perfectNums() { // Let's get the perfect numbers in the a range of positive integers ( 1 to 200) // OUTER LOOP for (int i = 1; i <= 200; i++) { int total = 0; // INNER LOOP for (int j = 1; j <= i / 2; j++) { total += j; } if (total == i) { System.out.println(i + " is a perfect number"); } } } // public static void findAndPrintPerfectNumber(int limit) { // for (int i = 1; i <= limit; i++) { // Loop through each number // int sumOfDivisors = 0; // // // Find proper divisors using nested loops. // // Note: Instead of a nested loop, we can iterate up to half of the number, // // but since you requested a nested loop approach, here's how it might look: // for (int j = 1; j <= i / 2; j++) { // Only need to check up to i/2 // if (i % j == 0) { // sumOfDivisors += j; // } // } // // // Check if the number is perfect. // if (sumOfDivisors == i && i != 1) { // Exclude 1 as it's not considered a // perfect number // System.out.println(i); // } // } // } }