#include <stdbool.h>
#include <stdio.h>
#include <sys/types.h>
#include <pthread.h>
void* compute_prime (void*);
int main() {
pthread_t thread;
int which_prime = 5;
int prime;
pthread_create(&thread,NULL,compute_prime,(void*)&which_prime);
pthread_join(&thread,(void*)&prime);
printf("The %dth prime number is : %d\n",which_prime
,prime
); return 0;
}
void* compute_prime (void* arg) {
int candidate = 2;
int n = *((int*) arg);
// Stores the value of arg in n
while (1) {
bool is_prime = true;
// Here the loop tests to see if the candidate is prime
for (int factor = 2; factor < candidate; ++factor)
if(candidate%factor==0) {
is_prime = false;
break;
}
if(is_prime==true) {
if(--n==0)
return (void*) candidate;
}
++candidate;
}
return NULL;
}
I2luY2x1ZGUgPHN0ZGJvb2wuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KI2luY2x1ZGUgPHB0aHJlYWQuaD4KCnZvaWQqIGNvbXB1dGVfcHJpbWUgKHZvaWQqKTsKCmludCBtYWluKCkgewogICAgcHRocmVhZF90IHRocmVhZDsKICAgIGludCB3aGljaF9wcmltZSA9IDU7CiAgICBpbnQgcHJpbWU7CiAgICBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkLE5VTEwsY29tcHV0ZV9wcmltZSwodm9pZCopJndoaWNoX3ByaW1lKTsKICAgIHB0aHJlYWRfam9pbigmdGhyZWFkLCh2b2lkKikmcHJpbWUpOwogICAgcHJpbnRmKCJUaGUgJWR0aCBwcmltZSBudW1iZXIgaXMgOiAlZFxuIix3aGljaF9wcmltZSxwcmltZSk7CiAgICByZXR1cm4gMDsKfQoKdm9pZCogY29tcHV0ZV9wcmltZSAodm9pZCogYXJnKSB7CiAgICBpbnQgY2FuZGlkYXRlID0gMjsKCiAgICBpbnQgbiA9ICooKGludCopIGFyZyk7CiAgICAvLyBTdG9yZXMgdGhlIHZhbHVlIG9mIGFyZyBpbiBuCiAgICB3aGlsZSAoMSkgewogICAgICAgIGJvb2wgaXNfcHJpbWUgPSB0cnVlOwogICAgICAgIC8vIEhlcmUgdGhlIGxvb3AgdGVzdHMgdG8gc2VlIGlmIHRoZSBjYW5kaWRhdGUgaXMgcHJpbWUKICAgICAgICBmb3IgKGludCBmYWN0b3IgPSAyOyBmYWN0b3IgPCBjYW5kaWRhdGU7ICsrZmFjdG9yKQogICAgICAgICAgICBpZihjYW5kaWRhdGUlZmFjdG9yPT0wKSB7CiAgICAgICAgICAgICAgICBpc19wcmltZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICBpZihpc19wcmltZT09dHJ1ZSkgewogICAgICAgICAgICBpZigtLW49PTApCiAgICAgICAgICAgICAgICByZXR1cm4gKHZvaWQqKSBjYW5kaWRhdGU7CiAgICAgICAgfQogICAgICAgICsrY2FuZGlkYXRlOwogICAgfQogICAgcmV0dXJuIE5VTEw7Cn0=