uint64_t algorithm() { uint64_t primeSum=2; cellList list; listInit(&list); listAdd(cellNew(2),&list); //printf("%"PRIu32" %"PRIu32"\n",list.first->value,list.last->value); for(uint64_t i=3; i<LIMIT; i++) if(isPrime(i,&list) == TRUE) { printf("-->%"PRIu64"\n",i); listAdd(cellNew(i),&list); primeSum+=i; } listDestroy(&list); return primeSum; }
static _Bool isPrime(uint64_t number, cellList* list) { cell* ptr = list->first; uint32_t counter=0; //printf("%"PRIu32"\n",list->volume); //printf("(%"PRIu64" %lu)\n",number,ptr->value); while(counter++<list->volume && ptr->value <= number/2) { if(number%ptr->value == 0) return FALSE; ptr = ptr->next; } listAdd(cellNew(number),list); return TRUE; }
Cell* cellNewTok (Parser *parser, int j, int tok) { Cell *cell; cell = cellNew (parser, j); cell_get_p (cell, j-1, j, tok) = 1.; return cell; }
void parserFinalizeRules (Parser *parser) { parser->cell[0] = cellNew (parser, 0); }