Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<mpi.h>
- #include<stdio.h>
- #include<stdlib.h>
- #include<math.h>
- int prost(int a)
- {
- if(a==1) return 0;
- if(a==2) return 1;
- for(int i=2;i<=sqrt(a);i++)
- {
- if(a%i==0) return 0;
- }
- return 1;
- }
- int main(int argc, char *argv[])
- {
- int i,err,size,rank,N,prosti,*moji,*svi,ostatak,broj,*sviNovi;
- FILE *f=fopen("greensOut.dat","w");
- err=MPI_Init(&argc,&argv);
- MPI_Comm_size(MPI_COMM_WORLD,&size);
- MPI_Comm_rank(MPI_COMM_WORLD,&rank);
- if(rank==0)
- {
- scanf("%d",&N);
- }
- MPI_Bcast(&N,1,MPI_INT,0,MPI_COMM_WORLD);
- moji=(int*)calloc(N,sizeof(int));
- svi=(int*)calloc(N,sizeof(int));
- sviNovi=(int*)calloc(N,sizeof(int));
- for(i=2*rank+1;i<N;i+=2*size)
- {
- moji[i]=prost(i);
- }
- MPI_Allreduce(moji,svi,N,MPI_INT,MPI_LOR,MPI_COMM_WORLD);
- moji[2]=1;
- for(i=2*rank+1;i<N;i+=2*size)
- {
- if(svi[i]==1)
- {
- ostatak=0;
- broj=i;
- while(broj>0)
- {
- ostatak+=broj%10;
- broj=broj/10;
- }
- if(!prost(ostatak))
- svi[i]=0;
- }
- }
- MPI_Reduce(svi,sviNovi,N,MPI_INT,MPI_LAND,0,MPI_COMM_WORLD);
- if(rank==0)
- {
- if(sviNovi[2]==1)
- fprintf(f,"%d\n",2);
- for(i=3;i<N;i+=2)
- {
- if(sviNovi[i]==1)
- fprintf(f,"%d\n",i);
- }
- }
- MPI_Finalize();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement