Code:
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
int isPrime(int num);
int main(int argc, char **argv){
int myID;
int numProcs;
int primeCount = 0;
// printf("The starting and ending values are: %d %d\n", starting, ending);
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &myID);
MPI_Comm_rank(MPI_COMM_WORLD, &numProcs);
if(myID == 0) { // Process 0 (head process)
int starting = 10;
int ending = 100;
MPI_Status status;
for(int i = 1; i < numProcs; i++){
MPI_Send(&starting, 1, MPI_INT, i, 1, MPI_COMM_WORLD);
MPI_Send(&ending, 1, MPI_INT, i, 2, MPI_COMM_WORLD);
}
int total = 0;
for (int i = 1; i < numProcs; i++) {
int primeCount;
MPI_Recv(&primeCount, 1, MPI_INT, i, 1, MPI_COMM_WORLD, &status); // blocking
total += primeCount;
}
} else { // All other processes
MPI_Status status;
int starting, ending;
for(int i = 1; i < numProcs; i++){
MPI_Recv(&starting, 1, MPI_INT, i, 1, MPI_COMM_WORLD, &status); // blocking
MPI_Recv(&ending, 1, MPI_INT, i, 2, MPI_COMM_WORLD, &status); // blocking
}
for (int i = starting; i < ending; i++) {
if(isPrime(i)){
primeCount++;
}
MPI_Send(&primeCount, 1, MPI_INT, 0, 1, MPI_COMM_WORLD);
}
printf("Prime count: %d\n", primeCount);
}
MPI_Finalize();
}
int isPrime(int num){
for (int i = 2; i < num; i++){
if (num % i == 0 && i != num) return 0;
}
return 1;
}
My output right now is: