【并行计算】使用MPI实现简单的并行素数筛法

并行素数筛法的几种思路

1.每个进程负责剔除一个数的倍数:

我们注意到,2的倍数比3多,3的倍数比5多,以此类推,即前几个进程几乎决定了总的执行时间,所以本方法不可能是高效的。

2.每个进程负责剔除一定范围内的数的倍数:

下面代码所实现的是这一种。

/*
 *Author:张华键
 *
 *Date:2015/10/30
 *
 *本程序用于并行求素数,给定一个整数n(本程序n <= 2^9*10^3),使用ceil(sqrt(n)/2)个进程进行筛选素数
 *
 *数据区根据进程个数均等划分
 *
 *主程序(0号进程)每找到一个素数k,就将其广播,其他从进程收到k,将本区间内k的倍数筛除
 *
 */
#include <stdio.h>
#define MPICH_SKIP_MPICXX
#include <mpi.h>
#include <stdlib.h>
#include <math.h>
#pragma comment(lib,"mpi.lib")

bool is_prime[512100];
int data[1500]; //起步素数

void Help(char* prog_name); //usage of the program

/*  ------------------------------------------------------------------- 
 *  主程序 
 *  ------------------------------------------------------------------- */ 
int main(int argc, char* argv[])

{

    int n,          //问题规模
        mycount,    //单个进程中素数个数
        allcount,   //总的素数个数
        myrank,     //子任务标识
        task_num,   //子任务个数
        partion_size,       
  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值