版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/laojiaqi/article/details/32962269
#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include "math.h"
#include "mpi.h"
int isPrimaryKey(int num);//是素数则返回1,不是则返回0
int main(int argc, char *argv[])
{
int bet[2],mypid,sum=0,local=0,size;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&mypid);
MPI_Comm_size(MPI_COMM_WORLD,&size);
if(mypid==0)
{
scanf("%d %d",&bet[0],&bet[1]);
}
MPI_Bcast(bet,2,MPI_INT,0,MPI_COMM_WORLD);
int i=0;
for(i=mypid+bet[0];i<=bet[1];i=i+size)//每个进程算自己的任务,保存在local中
{
local+=isPrimaryKey(i);
}
MPI_Reduce(&local,&sum,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD);//进行归约,就是把所有进程的local加起来,得到总的素数个数
if(mypid==0)
printf("number is %d\n",sum);
MPI_Finalize();
return 0;
}
int isPrimaryKey(int num)
{
int i,flag=0;
if(num==1)return 0;
for(i=2;i<=sqrt((double)num);i++)
{
if(num%i==0)
{
flag=1;
break;
}
}
if(flag==0)
{
printf("primary key is %d\n",num);
return 1;
}
else
return 0;
}