#include <iostream>
#include <iomanip>
#include <mpi.h>
using namespace std;

int main(int argc, char ** argv){
   int mynode, totalnodes;
   int sum = 0,startval,endval,accum;
   MPI_Status status;
   MPI_Init(&argc,&argv);
   MPI_Comm_size(MPI_COMM_WORLD, &totalnodes);
   MPI_Comm_rank(MPI_COMM_WORLD, &mynode);
   startval = 1000*mynode/totalnodes+1;
   endval =1000*(mynode+1)/totalnodes;
   for(int i=startval;i<=endval;i=i+1) sum = sum + i;
   if(mynode!=0)
      MPI_Send(&sum, 1, MPI_INT, 0, 1, MPI_COMM_WORLD);
   else
      for(int j=1;j<totalnodes;j=j+1){
         MPI_Recv(&accum, 1, MPI_INT, j, 1,
         MPI_COMM_WORLD, &status);
         sum = sum + accum;
      }
   if(mynode == 0)
      cout << "The sum from 1 to 1000 is: "<< sum << endl;
   MPI_Finalize();
}