我接到了一项任务。
编写输出素数的多线程Java,Pthreads或Win32程序。这个 程序应该如下工作:
#include <windows.h>
#include <iostream>
#define MAX_THREADS 1
using namespace std;
DWORD WINAPI Prime (LPVOID);
HANDLE hThreads [MAX_THREADS];
DWORD id [MAX_THREADS];
DWORD waiter;
DWORD WINAPI Prime(LPVOID Param)
{
DWORD Number = *(DWORD*)Param;
for (DWORD i=0;i<=Number;i++)
{
if((Number%2==0) ||(Number%3==0) || (Number%4==0)||(Number%5==0)||(Number%6==0)|| (Number%7==0)||(Number%8==0)||(Number%9==0))
cout <<"";
else
cout<<i;
}
return 0;
}
int main(int argc, char* argv[ ])
{
DWORD ThreadId;
HANDLE ThreadHandle;
int Param;
cout<<"Enter a number:";
cin>>Param;
cout<<"Prime numbers less than and equal to your number";
ThreadHandle=CreateThread(NULL,0,Prime,&Param,0,&ThreadId);
waiter=WaitForMultipleObjects(MAX_THREADS,hThreads,TRUE,INFINITE);
for(int i=0;i<MAX_THREADS;i++)
CloseHandle(hThreads[i]);
system ("pause");
return 0;
}
我一直在使用我在课堂上学到的东西来研究这个程序,但我似乎无法使我的程序工作。如果有人可以帮我清理我的程序并帮助我将其付诸实践,我将不胜感激。
答案 0 :(得分:1)
因为您通过所有整数在2到9之间检查可分性,所以您的程序不会报告任何小于11的素数。并且i
仅用于循环打印,并且根本没有用于寻找素数。
答案 1 :(得分:0)
检查素数的方法是错误的!我添加了一个检查素数的函数
#include <windows.h>
#include <iostream>
#define MAX_THREADS 1
using namespace std;
DWORD WINAPI Prime (LPVOID);
HANDLE hThreads [MAX_THREADS];
DWORD id [MAX_THREADS];
DWORD waiter;
int check_prime(int a)
{
int c;
for ( c = 2 ; c <= a - 1 ; c++ )
{
if ( a%c == 0 )
return 0;
}
if ( c == a )
return 1;
}
DWORD WINAPI Prime(LPVOID Param)
{
DWORD Number = *(DWORD*)Param;
for (DWORD i=2;i<=Number;i++)
{
if(check_prime(i)==0)
cout <<"";
else
cout<<i;
}
return 0;
}
int main(int argc, char* argv[ ])
{
// same your code
return 0;
}