// 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 并行求完数的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  7. OpenMP求完数

    源代码: #include "stdafx.h" //必须写在首行,因为其前面的include都会被忽略 #include "omp.h" #include & ...

  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. mysql mac启动

    设置别名 alias mysql=/usr/local/mysql/bin/mysql alias mysqladmin=/usr/local/mysql/bin/mysqladmin 修改密码 su ...

  2. 【英语】Bingo口语笔记(70) - 最易忽略的2个连读技巧

  3. Github托管代码步骤

    总结一下Github上项目托管步骤: Step 1:注册Github帐号,并创建一个repository,假如仓库名为test: Step 2:安装本地Git: sudo apt-get instal ...

  4. mysql利用存储过程批量插入数据

    最近需要测试一下mysql单表数据达到1000W条以上时增删改查的性能.由于没有现成的数据,因此自己构造,本文只是实例,以及简单的介绍. 首先当然是建表: [sql]view plaincopy CR ...

  5. 剑指offer—第三章高质量代码(数值的整数次方)

    高质量的代码:容错处理能力,规范性,完整性.尽量展示代码的可扩展型和可维护性. 容错处理能力:特别的输入和处理,异常,资源回收. 规范性:清晰的书写,清晰的布局,合理的命名. 完整性:功能测试,边界测 ...

  6. Delphi 注册文件类型 设置文件图标

        {------------------------------------------------------------------------------- @过程名: slpert -& ...

  7. Free Candies

    题意: 有4堆东西,每堆有n个每个有一个颜色,现在有一个篮子最多能装5个不同的颜色的东西,每次都从堆顶拿,当篮子出现两个相同颜色,可以获得这两个东西,求获得的最大数量 分析: 因为就4推,可以把各堆的 ...

  8. js代码大全

    超级实用且不花哨的js代码大全 事件源对象event.srcElement.tagNameevent.srcElement.type 捕获释放event.srcElement.setCapture() ...

  9. 2014 IGF 评选(转)

    前两天受邀去上海参加今年的独立游戏节评选,准确说是亚洲及太平洋地区的 IGF . 居然有接近 400 个参选游戏是让我事前没有想到的,尤其是在学生组还发现了不少好作品是个惊喜. 评审用了整整两天时间, ...

  10. C# 实现无焦点窗体(转载)

    #region 无焦点窗体 [System.Runtime.InteropServices.DllImport("user32.dll")] private extern stat ...