#include <iostream>
#include <vector>

int main() {
    long long N = 10000000;
    
    // Simulate running with 4 virtual MPI ranks
    int simulated_size = 4; 
    long long total_sum = 0;

    std::cout << "--- Simulating MPI Cluster with " << simulated_size << " Ranks ---" << std::endl;

    for (int rank = 0; rank < simulated_size; rank++) {
        // Your exact distribution formulas
        long long start = rank * N / simulated_size + 1;
        long long end = (rank + 1) * N / simulated_size;
        long long local_sum = 0;

        // Each simulated rank does its chunk
        for (long long i = start; i <= end; i++) {
            local_sum += i;
        }

        std::cout << "Simulated Process " << rank
                  << ": start = " << start
                  << ", end = " << end
                  << ", local sum = " << local_sum
                  << std::endl;

        // Simulating the MPI_Reduce behavior (global accumulation)
        total_sum += local_sum;
    }

    std::cout << "\n[Rank 0 Emulated Output]:" << std::endl;
    std::cout << "Final sum = " << total_sum << std::endl;

    return 0;
}