openmp 并行求完数
// GetWanShu.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include "omp.h"
#include <Windows.h>
#include "time.h"
//函数声明
void getWanShuBySection();
void getWanShu();
void getWanShuByReduction();
int _tmain(int argc, _TCHAR* argv[])
{
//串行实现求完数
clock_t start_LiXingLe=clock();
getWanShu();
clock_t end_LiXingLe=clock();
double chuanxingTime_LXL=end_LiXingLe-start_LiXingLe;
printf(" 串行时间为:%f\n",chuanxingTime_LXL);
//section 并行方法实现
getWanShuBySection();
//Reduction 并行方法实现
getWanShuByReduction(); //for 并行方法实现
omp_set_num_threads(4); start_LiXingLe=clock();
#pragma omp parallel
#pragma omp for for (int n = 1; n <= 10000; n++)
{
int sum = 0; for (int i = 1; i <= (n/2); i++) //除到原来一半就可以了
{
if (n % i == 0)
{
sum += i;
}
}
if (sum == n)
{
printf ("%d\n", sum);
}
} end_LiXingLe=clock();
double parallelTime_LXL=end_LiXingLe-start_LiXingLe;
printf(" for并行时间为 :%f\n",parallelTime_LXL);
printf("for加速比为:%f\n",chuanxingTime_LXL/ parallelTime_LXL); return 0;
}
void getWanShuBySection(){ omp_set_num_threads(4); clock_t start_LiXingLe=clock();
#pragma omp parallel
{
#pragma omp sections
{ #pragma omp section
for (int n = 1; n < 2500; n++)
{
int sum = 0;
for (int i = 1; i <= (n/2); i++) //除到原来一半就可以了
{
if (n % i == 0)
{
sum += i;
}
}
if (sum == n)
{
printf ("%d\n", sum);
}
}
#pragma omp section
for (int n = 2500; n < 5000; n++)
{
int sum = 0;
for (int i = 1; i <= (n/2); i++) //除到原来一半就可以了
{
if (n % i == 0)
{
sum += i;
}
}
if (sum == n)
{
printf ("%d\n", sum);
}
}
#pragma omp section
for (int n = 5000; n <= 7500; n++)
{
int sum = 0;
for (int i = 1; i <= (n/2); i++) //除到原来一半就可以了
{
if (n % i == 0)
{
sum += i;
}
}
if (sum == n)
{
printf ("%d\n", sum);
}
}
#pragma omp section
for (int n = 7500; n <= 10000; n++)
{
int sum = 0;
for (int i = 1; i <= (n/2); i++) //除到原来一半就可以了
{
if (n % i == 0)
{
sum += i;
}
}
if (sum == n)
{
printf ("%d\n", sum);
}
} } } clock_t end_LiXingLe=clock();
printf(" section并行时间为 :%d\n",end_LiXingLe-start_LiXingLe); }
void getWanShu(){ for (int n = 1; n <= 10000; n++)
{
int sum = 0;
for (int i = 1; i <= (n/2); i++) //除到原来一半就可以了
{
if (n % i == 0)
{
sum += i;
}
}
if (sum == n)
{
printf ("%d\n", sum);
}
} } void getWanShuByReduction(){ omp_set_num_threads(5); clock_t start_LiXingLe=clock();
for (int n = 1; n <= 10000; n++)
{
int sum = 0;
#pragma omp parallel for reduction(+:sum)
for (int i = 1; i <= (n/2); i++) //除到原来一半就可以了
{
if (n % i == 0)
{
sum += i;
}
}
if (sum == n)
{
printf ("%d\n", sum);
}
}
clock_t end_LiXingLe=clock();
printf(" reduction并行时间为 :%d\n",end_LiXingLe-start_LiXingLe); }
运行结果:
openmp 并行求完数的更多相关文章
- 帮初学者改代码——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 ...
- OpenMP求完数
源代码: #include "stdafx.h" //必须写在首行,因为其前面的include都会被忽略 #include "omp.h" #include & ...
- 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 ...
随机推荐
- linux中怎样从底部向上查看log文件
对于一些很大的log文件,我们用more查看时会很费劲,没有办法直接跳到末尾再向前查看. 我们可以用less来解决,less查看一个文件时,可以使用类似vi的command命令,在command模式下 ...
- 【转】IOS开发:[1]Xcode5界面入门
ios开发离不开xcode,这篇以xcode5界面来介绍一下xcode的界面都有哪些内容. 工具/原料 xcode5 整体来看区域有哪些? 1 首先我们先整体来看一下,xcode5界面可以分为五大主要 ...
- Eclipse无法识别小米2S手机
某日,发现小米2S手机调试程序,发现Eclipse识别不出该硬件设备. 最后,确认小米2S系统升级后,会把开发者选项-USB调试选项默认关闭,打开即可. ----------------------补 ...
- c排序算法大全
排序算法是一种基本并且常用的算法.由于实际工作中处理的数量巨大,所以排序算法 对算法本身的速度要求很高. 而一般我们所谓的算法的性能主要是指算法的复杂度,一般用O方法来表示.在后面将给出详细的说明.& ...
- 可接受多个值的文件上传字段HTML5新特性
<input type="file" id="input" multiple="multiple"> 主要是多了个multip ...
- MVC和WebApi 使用get和post 传递参数。
我们总结一下用js请求服务器的传参方法. Get方式 Get主要是用来查询,一般分为无参,一个参数,多个参数,实体对象参数. 1.无参 //Get没有参数 var get_f1 = function( ...
- vector.resize 与 vector.reserve的区别 .xml
pre{ line-height:1; color:#9f1d66; background-color:#a0ffc0; font-size:16px;}.sysFunc{color:#5d57ff; ...
- Autodesk Stingray 游戏引擎
Autodesk的游戏引擎质量够高的. http://v.youku.com/v_show/id_XMTMwMjc0MDIwMA==.html?qq-pf-to=pcqq.group http://v ...
- mysql数据库修改密码
更改MySQL用户密码 方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = password(' ...
- .net/c#连接sqlserver
Webconfig代码 <configuration> <appSettings> <add key="myconnect" value=" ...