OPENMP 實現判斷任意兩個數之間的素數個數

// abc.cpp : 定義控制檯應用程序的入口點。
//

#include "stdafx.h"
// OpenMp.cpp : 定義控制檯應用程序的入口點。
//#include "stdafx.h"
#include "omp.h"
#include <stdio.h>
#include <math.h>
#include <time.h>
int isPrimeNumber(int num);
int _tmain(int argc, _TCHAR* argv[])
{   
	int a,b,i;
	printf("輸入1個數\n");
	scanf("%d",&b);
	int sum=0;
	double start=clock();
	#pragma omp parallel for num_threads(2) reduction(+:sum)//制定線程個數,並對每個進程的sum進行歸約操作 
	for(i=2;i<=b;i++)
	{
	   int j=isPrimeNumber(i);
	   sum+=j;
	  //  printf("1個數爲%d id=%d\n",sum,omp_get_thread_num());
	}
	double end=clock();
   printf("素數個數爲%d 時間爲%lf\n",sum,end-start);

}  
int isPrimeNumber(int num)
{
	int i=2,flag=0;
	int upLimit=sqrt((double)num);
	for(;i<=upLimit;i++)
	{
		if(num%i==0)
			{
				flag=1;
				break;
			}
	}
	if(flag==1)
		return 0;//不是素數
	else
		return 1;//是素數

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章