Finding Prime Numbers using C-LINDA
The following program is proposed to compute prime numbers. Explain how it works and suggest an optimized version thereof.
#include#include "sr_linda.h" #define MAXVAL 1000 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); }
Date of last update: May 22, 1994.