在C语言中,可以使用POSIX线程库(pthread)来实现多线程因子分解
#include<stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <math.h>
typedef struct {
int number;
int start;
int end;
} FactorData;
void *find_factors(void *arg) {
FactorData *data = (FactorData *)arg;
int number = data->number;
int start = data->start;
int end = data->end;
for (int i = start; i <= end; i++) {
if (number % i == 0) {
printf("Thread %lu: %d is a factor of %d\n", pthread_self(), i, number);
}
}
return NULL;
}
int main() {
int number;
printf("Enter the number to be factorized: ");
scanf("%d", &number);
int num_threads = 4;
pthread_t threads[num_threads];
FactorData data[num_threads];
int range = (int)sqrt(number) / num_threads;
for (int i = 0; i < num_threads; i++) {
data[i].number = number;
data[i].start = i * range + 1;
data[i].end = (i + 1) * range;
pthread_create(&threads[i], NULL, find_factors, (void *)&data[i]);
}
for (int i = 0; i < num_threads; i++) {
pthread_join(threads[i], NULL);
}
return 0;
}
这个程序首先接收一个整数输入,然后创建4个线程。每个线程负责查找一部分范围内的因子。线程之间不会重复查找因子。最后,主线程等待所有子线程完成任务。