1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
#include "maklib.h"
#include "message.h"

int main() {
  int i;
  long long N = Size();
  // Faza pierwsza // sumujemy
  long long obecna_liczba;
  long long moja_suma;
  obecna_liczba = 0;
  moja_suma = 0;
  long long poczatek = (MyNodeId() * N) / NumberOfNodes();
  long long koniec = ((MyNodeId() + 1) * N) / NumberOfNodes();
  for ( i = poczatek; i < koniec; ++i) {
    long long kolejna = ElementAt(i);
    moja_suma += kolejna;
  }

  // Faza druga //wysyłamy /zbieramy
  PutLL(0,moja_suma);
  Send(0);

  if (MyNodeId() == 0) {
    long long suma = 0;
    
    for (i = 0; i < NumberOfNodes(); ++i) {
      int instancja = Receive(-1);
      suma += GetLL(instancja);
    }
    if(suma < 0){
      printf("0\n");
    }
    else {
      printf("%Ld\n",suma);
    }
  }
  
  return 0;
}