#include <stdio.h>
#include <math.h>

int isPerfect(int x) {
    int i, sum = 0;
    for (i = 1; i < x; i++)
        if (x % i == 0) sum += i;
    return sum == x;
}

int isPrime(int num) {
    if (num < 2) return 0;
    int i;
    for (i = 2; i * i <= num; i++)
        if (num % i == 0) return 0;
    return 1;
}

void firstNPrimes(int n) {
    int count = 0, num = 2;
    printf("First %d primes: ", n);
    while (count < n) {
        if (isPrime(num)) {
            printf("%d ", num);
            count++;
        }
        num++;
    }
    printf("\n");
}

void firstNPerfectSquares(int n) {
    int i;
    printf("First %d perfect squares: ", n);
    for (i = 1; i <= n; i++)
        printf("%d ", i * i);
    printf("\n");
}

int main() {
    int choice, n;

    do {
        printf("\n===== MENU =====\n");
        printf("1. Check Perfect Number\n");
        printf("2. Print first n primes\n");
        printf("3. Print first n perfect squares\n");
        printf("0. Exit\n");
        printf("Your choice: ");
        scanf("%d", &choice);

        switch(choice) {
            case 1:
                printf("Enter x: ");
                scanf("%d", &n);
                if (isPerfect(n))
                    printf("%d is Perfect: True\n", n);
                else
                    printf("%d is Perfect: False\n", n);
                break;
            case 2:
                printf("Enter n: ");
                scanf("%d", &n);
                firstNPrimes(n);
                break;
            case 3:
                printf("Enter n: ");
                scanf("%d", &n);
                firstNPerfectSquares(n);
                break;
            case 0:
                printf("Exiting...\n");
                break;
            default:
                printf("Invalid!\n");
        }
    } while (choice != 0);

    return 0;
}