コード例 #1
0
ファイル: count_primes.c プロジェクト: kimwalisch/primecount
int main()
{
  uint64_t count = primesieve_count_primes(0, 1000);
  printf("Primes below 1000 = %" PRIu64 "\n", count);

  return 0;
}
コード例 #2
0
ファイル: count_primes.c プロジェクト: Ismael-VC/primesieve
int main()
{
  uint64_t count = primesieve_count_primes(0, 1000);
  printf("Primes below 1000 = %llu\n", count);

  /* use multi-threading for large intervals */
  uint64_t stop = 1000000000;
  count = primesieve_parallel_count_primes(0, stop);
  printf("Primes below 10^9 = %llu\n", count);

  return 0;
}
コード例 #3
0
ファイル: primesieve.c プロジェクト: marioroy/mce-sandbox
SV* primesieve(SV *start_sv, SV *limit_sv, int run_mode, int fd)
{
   AV       *ret;
   uint64_t n_ret, start, limit, *primes;
   size_t   size, i;
   int      err;

   #ifdef __LP64__
      start = SvUV(start_sv);
      limit = SvUV(limit_sv);
   #else
      start = strtoull(SvPV_nolen(start_sv), NULL, 10);
      limit = strtoull(SvPV_nolen(limit_sv), NULL, 10);
   #endif

   ret = newAV(), n_ret = 0, err = 0;

   //====================================================================
   // Count primes, sum primes, otherwise output primes for this block.
   //====================================================================

   if (run_mode == MODE_COUNT) {
      n_ret = primesieve_count_primes(start, limit);
   }
   else {
      primes = primesieve_generate_primes(start, limit, &size, UINT64_PRIMES);

      if (run_mode == MODE_SUM) {
         for (i = 0; i < size; i++)
            n_ret += primes[i];
      }
      else {
         char *buf; int len;

         buf = (char *) malloc(sizeof(char) * (FLUSH_LIMIT + 216));
         len = 0;

         for (i = 0; i < size; i++) {
            if ((err = write_output(fd, buf, primes[i], &len)))
               break;
         }

         if (!err)
            err = flush_output(fd, buf, &len);

         free((void *) buf);
         buf = NULL;
      }

      primesieve_free(primes);
   }

   //====================================================================
   // Return.
   //====================================================================

   if (run_mode == MODE_PRINT) {
      av_push(ret, newSViv(err));
   }
   else {
      #ifdef __LP64__
         av_push(ret, newSVuv(n_ret));

      #else
         SV *n_sv; char *ptr; STRLEN len; int n_chars;

         n_sv = newSVpvn("", N_MAXDIGITS);
         ptr = SvPV(n_sv, len);
         n_chars = sprintull(ptr, n_ret);
         av_push(ret, newSVpvn(ptr, n_chars));

      #endif
   }

   return newRV_noinc((SV *) ret);
}