#include <stdio.h> 
#include "mon_linda.h" 
 
#define MAXVAL 100


main(argc,argv) 
int argc; 
char **argv; 
{ 
    int primes(); 
    int last,i,ok;
    struct linda_eval_table linda_eval_functions[2];
 
    linda_eval_functions[0].ptr = primes;
    strcpy(linda_eval_functions[0].name,"primes");
    linda_eval_functions[1].ptr = NULL;

    linda_init(&argc,argv,linda_eval_functions);
 
    for (i=2; i < MAXVAL; i++) 
    { 
       out("%s%d","primeargs",i); 
       eval("%s","primes"); 
    } 
 
    for (i=2; i < MAXVAL; i++) 
    { 
        rd("%s%d?d","primes",i,&ok); 
        if (ok == 1)  
            last = i; 
    } 

    printf("greatest prime is %d\n",last); 

    linda_end(); 
} 


int primes() 
{ 
    int me,i,limit,ok; 
    double sqrt(); 
   
    in("%s?d","primeargs",&me); 
    limit = sqrt((double) me) + 1; 
    for (i=2; i < limit; i++) 
    { 
        rd("%s%d?d","primes",i,&ok); 
        if (ok && (me%i == 0)) 
        { 
           out("%s%d%d","primes",me,0); 
           return(0); 
        } 
     } 
   
     p4_dprintf("slave found prime = %d\n",me); 
     out("%s%d%d","primes",me,1); 
     return(0); 
} 
