当前位置: 首页 > >

实现多线程程序测试一个数是否是完全数

发布时间:

实现多线程程序测试一个数是否是完全数
实现一个多线程程序测试一个数是否是完全数。如果一个数N的所有因数(不包括N本身)的和还是N,则N是一个完全数,如6和28,输入是一个整数N,如果N是完全数则输出true,否则输出false。主程序从命令行读取数字N和P,创建P个线程,将1~N这N个数分给各个线程,保证两个线程不会分到相同的数。每个线程判断这些树是不是N的因数,如果是,那么放到一个共享的缓冲区中。在父进程中用合适的同步方法等待所有的线程执行完毕后,判断N是否是完全数,即判断是否N的所有因数之和还是N(提示:你可以将测试的数限定在1至N的*方根来加速计算过程。)


#include
#include
int a[100]={0};
int j=0;
int n;
int x=0;
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
void* judge(void *arg)
{
pthread_mutex_lock(&mutex);
x++;
printf("%d个线程 ",x);
if(n%x==0)
{
a[j]=x;
j++;
printf("%d是因数",x);
}
printf("
");
pthread_mutex_unlock(&mutex);
return 0;
}
int main(){
int i;
printf("输入N
");
scanf("%d",&n);
pthread_t th;
for(int i=0;i {
pthread_create(&th, NULL,judge,NULL);
}
pthread_join(th,NULL);
int sum=0;
printf("因数有:");
for(i=0;a[i]!=0;i++)
{
sum=sum+a[i];
printf("%d ",a[i]);
}
printf("
");
printf("sum=%d
",sum);
if(sum==n)
printf("%d是完全数",n);
else
printf("%d不是完全数",n);
return 0;
}#include
#include
int a[100]={0};
int j=0;
int n;
int x=0;
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
void* judge(void *arg)
{
pthread_mutex_lock(&mutex);
x++;
printf("%d个线程 ",x);
if(n%x==0)
{
a[j]=x;
j++;
printf("%d是因数",x);
}
printf("
");
pthread_mutex_unlock(&mutex);
return 0;
}
int main(){
int i;
printf("输入N
");
scanf("%d",&n);
pthread_t th;
for(int i=0;i {
pthread_create(&th, NULL,judge,NULL);
}
pthread_join(th,NULL);
int sum=0;
printf("因数有:");
for(i=0;a[i]!=0;i++)
{
sum=sum+a[i];
printf("%d ",a[i]);
}
printf("
");
printf("sum=%d
",sum);
if(sum==n)
printf("%d是完全数",n);
else
printf("%d不是完全数",n);
return 0;
}


运行结果截图


我是用Windows系统下Codeblocks写的代码,其中使用头文件得自己重新配置一下。可能代码多多少少还是有些问题,不过能先把作业交上就行吧(叹气)。



友情链接: