#include <pthread.h>
#include <iostream>
using namespace std;
void* compute_prime (void* args)
{
int candidate = 2;
int n = *((int*)args);
while(1) {
int factor;
int is_prime = 1;
for (factor = 2; factor < candidate; ++factor)
if(candidate % factor == 0) {
is_prime = 0;
break;
}
if(is_prime){
if(--n == 0)
return (void*)candidate;
}
++candidate;
}
return NULL;
}
int main()
{
pthread_t thread;
int which_prime = 5000;
int prime;
pthread_create (&thread, NULL, &compute_prime, &which_prime);
pthread_join(thread, (void**)&prime);
printf("The %d th prime number is %d.\n", which_prime, prime);
}
I2luY2x1ZGUgPHB0aHJlYWQuaD4KI2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCogY29tcHV0ZV9wcmltZSAodm9pZCogYXJncykgCnsKICBpbnQgY2FuZGlkYXRlID0gMjsKICBpbnQgbiA9ICooKGludCopYXJncyk7CgogIHdoaWxlKDEpIHsKICAgIGludCBmYWN0b3I7CiAgICBpbnQgaXNfcHJpbWUgPSAxOwogICAgZm9yIChmYWN0b3IgPSAyOyBmYWN0b3IgPCBjYW5kaWRhdGU7ICsrZmFjdG9yKQogICAgICBpZihjYW5kaWRhdGUgJSBmYWN0b3IgPT0gMCkgewogICAgaXNfcHJpbWUgPSAwOwogICAgYnJlYWs7CiAgICAgIH0KICAgIGlmKGlzX3ByaW1lKXsKICAgICAgaWYoLS1uID09IDApCiAgICByZXR1cm4gKHZvaWQqKWNhbmRpZGF0ZTsKICAgIH0KICAgICsrY2FuZGlkYXRlOwogIH0KICByZXR1cm4gTlVMTDsKfQoKaW50IG1haW4oKQp7CiAgcHRocmVhZF90IHRocmVhZDsKICBpbnQgd2hpY2hfcHJpbWUgPSA1MDAwOwogIGludCBwcmltZTsKICBwdGhyZWFkX2NyZWF0ZSAoJnRocmVhZCwgTlVMTCwgJmNvbXB1dGVfcHJpbWUsICZ3aGljaF9wcmltZSk7CgogIHB0aHJlYWRfam9pbih0aHJlYWQsICh2b2lkKiopJnByaW1lKTsKICBwcmludGYoIlRoZSAlZCB0aCBwcmltZSBudW1iZXIgaXMgJWQuXG4iLCB3aGljaF9wcmltZSwgcHJpbWUpOwp9