#include <pthread.h> #include <stdio.h> #include <stdlib.h> int target; int num_threads; void* find_factors(void* arg) { int start = *((int*)arg); for (int i = start; i <= target; i = i + num_threads) { if (target % i == 0) { printf("%d is a factor\n", i); } } return NULL; } /** * Find all nontrivial factors of a given number, using concurrency. */ int main(int argc, char** argv) { target = atoi(argv[1]); num_threads = atoi(argv[2]); pthread_t threads[num_threads]; int starts[num_threads]; for (int i = 0; i < num_threads; i++) { starts[i] = i + 1; // Thread 0 starts with 1, 1 starts with 2, etc. pthread_create(&threads[i], NULL, find_factors, &starts[i]); } for (int i = 0; i < num_threads; i++) pthread_join(threads[i], NULL); return 0; }