#include <stdio.h>
#include <mpi.h>
int main(int argc, char** argv) {
int rank, size, N = 100;
int sum = 0;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
int local_sum = 0;
int chunk_size = N / size;
int start = rank * chunk_size + 1;
int end = start + chunk_size - 1;
if (rank == size - 1) {
end = N;
}
for (int i = start; i <= end; i++) {
local_sum += i;
}
MPI_Reduce(&local_sum, &sum, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
if (rank == 0) {
printf("The sum of numbers from 1 to %d is %d\n", N
, sum
); }
MPI_Finalize();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtcGkuaD4KCmludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgewogICAgaW50IHJhbmssIHNpemUsIE4gPSAxMDA7CiAgICBpbnQgc3VtID0gMDsKICAgIAogICAgTVBJX0luaXQoJmFyZ2MsICZhcmd2KTsKICAgIE1QSV9Db21tX3JhbmsoTVBJX0NPTU1fV09STEQsICZyYW5rKTsKICAgIE1QSV9Db21tX3NpemUoTVBJX0NPTU1fV09STEQsICZzaXplKTsKICAgIAogICAgaW50IGxvY2FsX3N1bSA9IDA7CiAgICBpbnQgY2h1bmtfc2l6ZSA9IE4gLyBzaXplOwogICAgaW50IHN0YXJ0ID0gcmFuayAqIGNodW5rX3NpemUgKyAxOwogICAgaW50IGVuZCA9IHN0YXJ0ICsgY2h1bmtfc2l6ZSAtIDE7CiAgICAKICAgIGlmIChyYW5rID09IHNpemUgLSAxKSB7CiAgICAgICAgZW5kID0gTjsKICAgIH0KICAgIAogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7CiAgICAgICAgbG9jYWxfc3VtICs9IGk7CiAgICB9CiAgICAKICAgIE1QSV9SZWR1Y2UoJmxvY2FsX3N1bSwgJnN1bSwgMSwgTVBJX0lOVCwgTVBJX1NVTSwgMCwgTVBJX0NPTU1fV09STEQpOwogICAgCiAgICBpZiAocmFuayA9PSAwKSB7CiAgICAgICAgcHJpbnRmKCJUaGUgc3VtIG9mIG51bWJlcnMgZnJvbSAxIHRvICVkIGlzICVkXG4iLCBOLCBzdW0pOwogICAgfQogICAgCiAgICBNUElfRmluYWxpemUoKTsKICAgIHJldHVybiAwOwp9Cg==