##### Program description:

Lab 6

Write an MPI program, countprimes which will count the number of prime numbers in the numbers from 1 to n inclusive where n is a long integer. The value for n which can be set in the program using a constant should be 50,000. Each process will test its share of the cases. Each process should print out any primes that it finds in a readable manner indicating which process found it and the actual prime. The master process should end with printing a total for the count of the number of primes and the total amount of time taken to find all the primes. Please follow the following instructions carefully before submitting your work: Before submission, make sure you clean up the directories so that no miscellaneous files are kept around in the submission.

##### Your code:

Make file

```
numprimes: numprimes.c
/usr/lib64/openmpi/bin/mpicc -O -o numprimes numprimes.c
clean:
rm -f numprimes core *~
```

.c File

```
#include <stdio.h>
#include <unistd.h>
#include <mpi.h>
// Return 1 if 'i'th bit of 'n' is 1; 0 otherwise
#define EXTRACT_BIT(n,i) ((n&(1<<i))?1:0)
#define N 100
// Checks if number is prime
int check_prime (int id, long z) {
long i;
for(i = 2; i < z; i++){
if(z % i == 0)
return 0;
}
printf ("%d) %d\n", id, z); //Prints the process number and the prime numbers that process found
fflush (stdout);
return 1;
}
int main (int argc, char *argv[])
{
int count; // Solutions found by this proc
int global_count; // Total number of solutions
int i;
int id; // Process rank
int p; // Number of processes
char hostname[1024];
long n = N;
// OpenMPI
MPI_Init (&argc, &argv);
MPI_Comm_rank (MPI_COMM_WORLD, &id);
MPI_Comm_size (MPI_COMM_WORLD, &p);
hostname[1023] = '\0';
gethostname(hostname, 1023);
printf("MPI rank %d on host %s\n", id, hostname);
// Goes through the numbers, checking if they are prime and if so, increasing count
count = 0;
for (i = id + 1; i < n; i += p)
count += check_prime (id, i);
MPI_Reduce (&count, &global_count, 1, MPI_INT, MPI_SUM, 0,
MPI_COMM_WORLD);
MPI_Finalize();
if (!id) printf ("There are %d different solutions\n",
global_count); // Prints out total number of prime numbers found
return 0;
}
```

All the assignments will be posted. Subscribe for more! :)