源代码:

 #include "stdafx.h"  //必须写在首行,因为其前面的include都会被忽略
#include "omp.h"
#include <Windows.h>
#include "time.h"
#include <iostream>
#include <set>
using namespace std;

  //串行方式
set<int> FinishedNumber(int n)
{
set<int> s;
for (int i = ; i <= n; i++)
{
int maxv = (int)(sqrt(double(i)) + );
int sum = ;
for (int j = ; j<maxv; j++)
if (i%j == )
sum += j + i / j;
if (sum == i)
s.insert(i);
}
return s;
}   //并行方式
set<int> FinishedNumber(int n, int p)
{
set<int> s;
omp_set_num_threads(p);
#pragma omp parallel
#pragma omp for
for (int i = ; i <= n; i++)
{
int maxv = (int)(sqrt(double(i)) + );
int sum = ;
for (int j = ; j<maxv; j++)
if (i%j == )
sum += j + i / j;
if (sum == i)
s.insert(i);
}
return s;
} void Test(int step, int count)
{
/*int step=100000;
int count=5;*/
for (int i = ; i <= count; i++)
{
int n = i*step;
clock_t start_Serial = clock(); set<int> result = FinishedNumber(n);
printf("n=%d以内的所有完数为:\n", n);
for (set<int>::iterator it = result.begin(); it != result.end(); it++)
{
/*cout<<*it<<endl;*/
printf("%d\n", *it);
} clock_t end_Serial = clock();
double timeCollapsedSerial = end_Serial - start_Serial;
printf("n=%d, 串行方式运行耗时:%f\n", n, timeCollapsedSerial); int p = ;
double timeCollapsedParallel = ;
for (int power = ; power<; power++)
{
p = pow(, power);
clock_t start_Parallel = clock();
FinishedNumber(n, p);
clock_t end_Parallel = clock();
timeCollapsedParallel = end_Parallel - start_Parallel;
float accelerationRate = timeCollapsedSerial / timeCollapsedParallel;
printf("n=%d, p=%d, 并行方式运行耗时: %f,加速比: %.3f\n", n, p, timeCollapsedParallel, accelerationRate);
} printf("\n");
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int step = * ;
int count = ;
Test(step, count);
system("pause");
}

运行结果:

OpenMP求完数的更多相关文章

  1. openmp 并行求完数

    // GetWanShu.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "omp.h" #inclu ...

  2. 帮初学者改代码——playerc之“练习:求完数问题”(下)

    前文链接:帮初学者改代码——playerc之“练习:求完数问题”(上) 再来看看be_ferfect()应该如何改. be_ferfect()函数的功能是判断number是否为完数,同时把因子对写入d ...

  3. 帮初学者改代码——playerc之“练习:求完数问题”(上)

    原文:“练习:求完数问题” 原代码: // #include <stdio.h> #include <stdlib.h> #include <math.h> #de ...

  4. Java50道经典习题-程序9 求完数

    题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完数. public class Prog9 { public stati ...

  5. 蓝桥杯 算法训练 ALGO-152 8-2求完数

     算法训练 8-2求完数   时间限制:50.0s   内存限制:256.0MB 问题描述 如果一个自然数的所有小于自身的因子之和等于该数,则称为完数.设计算法,打印1-9999之间的所有完数. 样例 ...

  6. JAVA 基础编程练习题9 【程序 9 求完数】

    9 [程序 9 求完数] 题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如 6=1+2+3.编程找出 1000 以内的 所有完数. package cskaoyan ...

  7. Java实现 蓝桥杯VIP 算法训练 求完数

    问题描述 如果一个自然数的所有小于自身的因子之和等于该数,则称为完数.设计算法,打印1-9999之间的所有完数. 样例输出 与上面的样例输入对应的输出. 例: 数据规模和约定 1-9999 publi ...

  8. ALGO-152_蓝桥杯_算法训练_8-2求完数

    记: 掌握完数的概念 AC代码: #include <stdio.h> int main(void) { int i,j,sum; ; i <= ; i ++) { sum = ; ...

  9. Problem09 求完数

    题目:一个数如果恰好等于它的因子之和,这个数就称为"完数". 分析:例如6=1+2+3. 编程找出1000以内的所有完数. 假如整数n除以m,结果是无余数的整数,那么我们称m就是n ...

随机推荐

  1. SCI答复审稿人的策略和答复信的写作技巧

    SCI论文被录用的最后一步 –---答复审稿人的策略和答复信的写作技巧 [好文转载] : 一篇稿子从酝酿到成型历经艰辛,投出去之后又是漫长的等待,好容易收到编辑的回信,得到的往往又是审稿人不留情面的一 ...

  2. GPRS/3G

    像GPRS/3G模块之类的应用,需要连接,登陆,初始化等步骤完成后才能传输数据,而这些步骤又比较耗时. 所以用 状态机 + 超时 的机制来实现比较合理. 如下代码片段来描述数据透传 : 状态机 + 超 ...

  3. virtualbox中centos系统配置nat+host only上网

    以前一直使用的是virtualbox的桥接模式,桥接模式的特点: 虚拟机和宿主机处于同等地位,就像是一台真实主机一样存在于局域网中,可以分配到一个网络中独立的IP. 虚拟机和宿主机之间能够互访. 如果 ...

  4. EF 索引

    public class CustomerMap : EntityTypeConfiguration<Customer> { public CustomerMap() { this.Pro ...

  5. HDInsight 路径问题

    HDInsight中..上传文件的路径是要区分大小写的.. 很变态吧.. 所以项目中要求全部路径使用小写..

  6. java 利用反射机制,获取实体所有属性和方法,并对属性赋值

    一个普通的实体Person: private int id; private String name; private Date createdTime;...//其它字段// get set方法 . ...

  7. Ubuntu 源码安装 nginx 1.9.2

    安装前准备: //更新系统 1.sudo apt-get update //安装pcre包 2.sudo apt-get install libpcre3 libpcre3-dev   3.sudo  ...

  8. linux下vim更改注释颜色

    我linux下默认底色是黑色,字体是绿色,但是注释默认是蓝色,,很不爽...所以要更改注释颜色......以下文章来自转载. from: http://blog.csdn.net/gz109/arti ...

  9. CF469D Two Set (并查集)

    Codeforces Round #268 (Div. 2)D Codeforces Round #268 (Div. 1)B CF468B D. Two Sets time limit per te ...

  10. pip高级使用技巧以及搭建自己的pypi服务器

    =========================  pip 访问非官方pypi源, 以及代理的设置=========================在Windows下安装某些Python的C ext ...