C语言多线程判断质数
时间: 2024-12-30 15:06:40 浏览: 3
在C语言中,多线程可以用于并行计算,提高判断质数的效率。以下是一个简单的示例,展示如何使用`pthread`库创建两个线程分别检查一个大整数是否能被2到sqrt(n)之间的数整除,以判断n是否为质数:
```c
#include <stdio.h>
#include <pthread.h>
#include <math.h>
// 判断是否质数的辅助函数
int is_prime(int n, int start, int end) {
if (start * start > n)
return 1; // 如果start的平方大于n,那么就不可能有因子了,所以是质数
for (int i = start; i <= end; ++i) {
if (n % i == 0) {
return 0; // 发现因子,说明不是质数
}
}
return 1;
}
void* check_prime(void* arg) {
int* num = (int*)arg;
int low = sqrt(*num);
int high = floor(low);
int result = is_prime(*num, 2, high);
pthread_exit(result); // 使用pthread_exit返回结果给主线程
}
int main() {
int number = ...; // 待检测的数字
pthread_t thread1, thread2;
int ret1 = pthread_create(&thread1, NULL, check_prime, &number);
int ret2 = pthread_create(&thread2, NULL, check_prime, &number);
if (ret1 || ret2) {
printf("Error creating threads: %d\n", ret1);
return -1;
}
int prime1 = pthread_join(thread1, NULL);
int prime2 = pthread_join(thread2, NULL);
if (prime1 && prime2) {
printf("%d is a prime number.\n", number);
} else {
printf("%d is not a prime number.\n", number);
}
return 0;
}
```
在这个例子中,每个线程负责检查n的一半范围,通过并发减少判断的时间。然而,由于线程间通信和同步的复杂性,对于非常大的数,这种并行化效果可能会受限于上下文切换开销。此外,这个示例并未处理多个线程同时访问共享变量的情况,实际使用时需要考虑数据同步。
阅读全文