#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <stdbool.h>

bool is_prime(int num) {
    if (num <= 1) return false;
    for (int i = 2; i <= num / 2; i++) {
        if (num % i == 0) return false;
    }
    return true;
}

int main() {
    pid_t pid1, pid2, parent_pid;

    parent_pid = getpid();

    pid1 = fork();

    if (pid1 == 0) {
        // Child Process 1
        int child1_pid = getpid();
        if (is_prime(child1_pid)) {
            printf("Child 1 (PID %d): My PID is a prime number.\n", child1_pid);
        } else {
            printf("Child 1 (PID %d): My PID is not a prime number.\n", child1_pid);
        }
        exit(0);
    } else {
        pid2 = fork();

        if (pid2 == 0) {
            // Child Process 2
            if (is_prime(parent_pid)) {
                printf("Child 2 (PID %d): My parent's PID (%d) is a prime number.\n", getpid(), parent_pid);
            } else {
                printf("Child 2 (PID %d): My parent's PID (%d) is not a prime number.\n", getpid(), parent_pid);
            }
            exit(0);
        } else {
            // Parent Process
            wait(NULL);
            wait(NULL);
            printf("Parent (PID %d): Missions accomplished...\n", parent_pid);
        }
    }
    return 0;
}
