OpenMP求完数
源代码:
#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求完数的更多相关文章
- openmp 并行求完数
// GetWanShu.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "omp.h" #inclu ...
- 帮初学者改代码——playerc之“练习:求完数问题”(下)
前文链接:帮初学者改代码——playerc之“练习:求完数问题”(上) 再来看看be_ferfect()应该如何改. be_ferfect()函数的功能是判断number是否为完数,同时把因子对写入d ...
- 帮初学者改代码——playerc之“练习:求完数问题”(上)
原文:“练习:求完数问题” 原代码: // #include <stdio.h> #include <stdlib.h> #include <math.h> #de ...
- Java50道经典习题-程序9 求完数
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完数. public class Prog9 { public stati ...
- 蓝桥杯 算法训练 ALGO-152 8-2求完数
算法训练 8-2求完数 时间限制:50.0s 内存限制:256.0MB 问题描述 如果一个自然数的所有小于自身的因子之和等于该数,则称为完数.设计算法,打印1-9999之间的所有完数. 样例 ...
- JAVA 基础编程练习题9 【程序 9 求完数】
9 [程序 9 求完数] 题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如 6=1+2+3.编程找出 1000 以内的 所有完数. package cskaoyan ...
- Java实现 蓝桥杯VIP 算法训练 求完数
问题描述 如果一个自然数的所有小于自身的因子之和等于该数,则称为完数.设计算法,打印1-9999之间的所有完数. 样例输出 与上面的样例输入对应的输出. 例: 数据规模和约定 1-9999 publi ...
- ALGO-152_蓝桥杯_算法训练_8-2求完数
记: 掌握完数的概念 AC代码: #include <stdio.h> int main(void) { int i,j,sum; ; i <= ; i ++) { sum = ; ...
- Problem09 求完数
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数". 分析:例如6=1+2+3. 编程找出1000以内的所有完数. 假如整数n除以m,结果是无余数的整数,那么我们称m就是n ...
随机推荐
- php 多条数据更新
mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 1 UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_va ...
- zabbix安装全过程
在了解<zabbix硬件.软件需求>之后,在你心里应该有备选的机器.今天开始安装zabbix.zabbix需要LNMP或者LAMP环境.环境的搭建不在本章范围内. LNMP环境配置Linu ...
- mysql数据表分表策略(转)
mysql分表方法: 方法一. 做数据库集群! 主从数据库 双向热备份(或一对多的数据库实时备份策略),这样可将数据库查询分摊到几个服务器去(可跟服务器负载均衡结合起来架构) 优点:扩展性好,没有多个 ...
- 史上最全的maven pom.xml文件教程详解
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- php简单实用的操作文件工具类(创建、移动、复制、删除)
php简单实用好用的文件及文件夹复制函数和工具类(创建.移动.复制.删除) function recurse_copy($src,$dst) { // 原目录,复制到的目录 $dir = opend ...
- 郝斌C语言代码
#include<stdio.h> int main() { ; printf("%#x\n",a); ; } /* output 0xf; */ //(15)10= ...
- Mac安装OpenCV
安装过程参考这篇文章Mac平台上OpenCV开发环境搭建 也可以参考文档官网上的安装文档Installation in Linux(不知道为什么没有Installation in Mac...) 我的 ...
- Javascript正则表达式匹配替换
根据正则表达式的匹配结果将匹配项替换为*function regReplace(reg, str){ var result, //最终输出结果 out, //每次运行正则exec返回的匹配结果. in ...
- Linux 动态监听进程shell
背景 前几天在研究线程的时候,看到一句话说java里的线程Thread.run都会在Linux中fork一个的轻量级进程,于是就想验证一下(笔者的机器是Linux的).当时用top命令的时候,进程总是 ...
- PHPCMS调用form类编辑器editor函数动态上传图片附件
http://w3note.com/web/49.html phpcms v9的系统类库有一个表单类,它封装了表单的一些组件,如编辑器.图片上传.时间选择器.模板选 择器等,更详细请参考form.cl ...